yield
和return
之間的區別是什麼? 和實際發生什麼時,我們yield
生成器中的任何值或請求?Python的yield和return語句?和Scrapy產生請求
我不是從任何其他函數或程序調用我的生成器。
我的循環是:
for index in range(3):
yield Request(url,callback=parse)
這使得在特定的URL請求,調用請求後回調函數。這段代碼在做什麼?
代碼的後續順序是什麼?
yield
和return
之間的區別是什麼? 和實際發生什麼時,我們yield
生成器中的任何值或請求?Python的yield和return語句?和Scrapy產生請求
我不是從任何其他函數或程序調用我的生成器。
我的循環是:
for index in range(3):
yield Request(url,callback=parse)
這使得在特定的URL請求,調用請求後回調函數。這段代碼在做什麼?
代碼的後續順序是什麼?
你的問題沒有被@Jochen鏈接的問題回答的唯一方面是「我不是從任何其他函數或程序調用我的生成器」。
您可以定義您的搜尋器類,scrapy調用您定義的(特殊)函數,如文檔中所述。 (例如,parse
函數是未指定回調的請求的默認回調)。
我想你正面臨着函數start_requests()
中的謎題,其中的上下文yield
。
例如:
def start_requests(self):
urls = [
'http://quotes.toscrape.com/page/1/',
'http://quotes.toscrape.com/page/2/',
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
當你指的scrapy spider的文檔,然後找到函數命名start_requests()
,它說的方法必須返回一個可迭代。如果你改變yield來返回,它不是可迭代的,因爲當你啓動你的蜘蛛時,for循環已經結束。它可能是一團糟。
蜘蛛應該向這些目的地發送http請求是很自然的,所以最好的方法是生成器。在for循環中,您的蜘蛛將在yield
處停止,並返回scrapy.Request()
,完成所有工作後,您的蜘蛛將send()
生成並移至下一個列表中的網址 。
可能出現[Python yield關鍵字解釋]重複(http://stackoverflow.com/questions/231767/the-python-yield-keyword-explained) – 2012-01-08 18:40:02
不,但它的更詳細和相關的一些例子對於SCRAPY請求對象。 – Clayton 2012-01-08 18:48:46
你讀過這個問題嗎? – 2012-01-08 21:52:00