Python的yield和return语句?和Scrapy产生请求
问题描述:
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://*.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