yield
和return
之间的区别是什么?
以及在生成器中我们yield
任何值或请求时实际发生了什么?
我没有从任何其他功能或程序中调用我的生成器。
我的循环是:
for index in range(3):
yield Request(url,callback=parse)
这是在特定URL上发出请求并在请求后调用回调函数。这段代码在做什么?
代码遵循的顺序是什么?
答案 0 :(得分:1)
@Jochen链接的问题没有回答你问题的唯一方面是“我不是从任何其他函数或程序调用我的生成器。”。
您定义了爬虫类,scrapy调用您定义的(特殊)函数,如文档中所指定。 (例如,parse
函数是未指定回调的请求的默认回调。)
答案 1 :(得分:0)
我猜您在函数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)
的谜题。
例如:
start_requests()
当您引用scrapy spider文档然后找到名为yield
的函数时,它表示该方法必须返回一个iterable。如果你将yield更改为return,那么它不是可迭代的,因为当你启动你的蜘蛛时for循环已经结束了。它可能是一团糟。
蜘蛛应该逐个向这些目的地发送http请求是很自然的,所以最好的方法是生成器。在for循环中,您的蜘蛛将停在scrapy.Request()
并返回send()
,完成所有操作后,您的蜘蛛将{{1}}生成并生成下一个
跟随列表中的网址。