2012-01-08 62 views
3

yieldreturn之間的區別是什麼? 和實際發生什麼時,我們yield生成器中的任何值或請求?Python的yield和return語句?和Scrapy產生請求

我不是從任何其他函數或程序調用我的生成器。

我的循環是:

for index in range(3): 
    yield Request(url,callback=parse) 

這使得在特定的URL請求,調用請求後回調函數。這段代碼在做什麼?

代碼的後續順序是什麼?

+1

可能出現[Python yield關鍵字解釋]重複(http://stackoverflow.com/questions/231767/the-python-yield-keyword-explained) – 2012-01-08 18:40:02

+2

不,但它的更詳細和相關的一些例子對於SCRAPY請求對象。 – Clayton 2012-01-08 18:48:46

+0

你讀過這個問題嗎? – 2012-01-08 21:52:00

回答

1

你的問題沒有被@Jochen鏈接的問題回答的唯一方面是「我不是從任何其他函數或程序調用我的生成器」。

您可以定義您的搜尋器類,scrapy調用您定義的(特殊)函數,如文檔中所述。 (例如,parse函數是未指定回調的請求的默認回調)。

0

我想你正面臨着函數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()生成並移至下一個列表中的網址 。