Подтвердить что ты не робот

Как объединить результаты из целевой страницы в текущую страницу в scrapy?

Вам нужен пример в scrapy о том, как получить ссылку с одной страницы, затем перейти по этой ссылке, получить больше информации со связанной страницы и объединить некоторые данные с первой страницы.

4b9b3361

Ответ 1

Частично заполните свой элемент на первой странице и поместите его в свой запрос meta. Когда вызывается обратный вызов для следующей страницы, он может принимать частично заполненный запрос, помещать в него больше данных и затем возвращать его.

Ответ 2

Более подробная информация о передаче объектов и объектов запроса meta описана в этой части документации:

http://readthedocs.org/docs/scrapy/en/latest/topics/request-response.html#passing-additional-data-to-callback-functions

Этот вопрос связан также с: Scrapy: Следуйте ссылке, чтобы получить дополнительные данные элемента?

Ответ 3

Пример из scoc documntation

def parse_page1(self, response):
    item = MyItem()
    item['main_url'] = response.url
    request = scrapy.Request("http://www.example.com/some_page.html",
                         callback=self.parse_page2)
    request.meta['item'] = item
    return request

def parse_page2(self, response):
    item = response.meta['item']
    item['other_url'] = response.url
    return item

Ответ 4

Небольшая иллюстрация кода документации Scrapy

def start_requests(self):
        yield scrapy.Request("http://www.example.com/main_page.html",callback=parse_page1)
def parse_page1(self, response):
    item = MyItem()
    item['main_url'] = response.url ##extracts http://www.example.com/main_page.html
    request = scrapy.Request("http://www.example.com/some_page.html",callback=self.parse_page2)
    request.meta['my_meta_item'] = item ## passing item in the meta dictionary
    ##alternatively you can follow as below
    ##request = scrapy.Request("http://www.example.com/some_page.html",meta={'my_meta_item':item},callback=self.parse_page2)
    return request

def parse_page2(self, response):
    item = response.meta['my_meta_item']
    item['other_url'] = response.url ##extracts http://www.example.com/some_page.html
    return item