scrapy使用yield返回Request的步骤是怎么样的
程序如图所示,是教程上的一个例子,我知道yield是一个迭代器,用next函数可以在上一次的挂起处继续运行,但是在在这里,我不明白for+yield语句的执行步骤是什么了,在scrapy中是如何使用next函数以实现Request对象递归使用的呢
如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

评论(9)


不用yield写一次parse方法你就明白了:
def parse(self, response): result_list = [] for h3 in response.xpath("//h3").extract(): result_list.append(MyItem(title=h3) for url in response.xpath("//a/@href").extract(): result_list.append(scrapy.Request(url, callback=self.parse)) return result_list
区别在于用了yield的函数会返回一个生成器,生成器不会一次把所有值全部返回给你,而是你每调用一次next返回一个值。
如果你想了解生成器和迭代器,可以去看相关文档。
它们的用法很简单:
for item in list:
process(item)
for item in iterator:
process(item)
for item in generator:
process(item)
Python会帮你处理内部细节,你只管用就行了。



发布评论
需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。