Как объединить результаты из целевой страницы в текущую страницу в scrapy? - PullRequest
14 голосов
/ 12 декабря 2011

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

Ответы [ 4 ]

15 голосов
/ 12 декабря 2011

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

7 голосов
/ 11 апреля 2012

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

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

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

4 голосов
/ 10 декабря 2014

Пример из scrapy 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
2 голосов
/ 26 декабря 2014

Немного иллюстрации кода документации 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...