Какая логика стоит за получением scrapy.http.Request? - PullRequest
0 голосов
/ 07 июня 2018

Код, который я не могу понять, взят из здесь :

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
    yield request

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

Из одного из ответов на стекопоток Я могу получить основную идеюв какое время выполняются строки вокруг ключевого слова yield.Но приведенный выше код слишком сложен для меня из-за его кажущейся вложенности yield.

Можете ли вы объяснить взаимодействие между двумя yield и механизмом обратного вызова?В частности, как эти строки запускаются для выполнения?

Спасибо.

1 Ответ

0 голосов
/ 07 июня 2018

yield хорошо описан здесь .На самом деле, в этом случае нет необходимости yield.Вы можете легко заменить его на return и получите тот же результат.Это потому, что yield следует использовать, когда вам нужно перебрать список некоторых элементов.Например, чтобы проанализировать все ссылки со страницы, вы можете выполнить следующий цикл:

for link in response.xpath('//a/@href'):
    yeild Request(link, callback=self.parse2) 

, и для каждой ссылки будет вызван ваш метод parse2.Уступка о возвращении нескольких запросов или предметов в скрапе.Здесь нет ракетостроения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...