不用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会帮你处理内部细节,你只管用就行了。