我是scrapy的新手,无法弄清楚产量的工作过程
yield request.follow(url, callback=func)
到目前为止,我知道,请求被发送并且响应被发送到回调函数,最后返回一个yield对象的请求对象。例如,下面的代码得到响应并进一步从中提取链接并发送请求。
def parse_foo(self, response):
foo_links = response.css(self.some_css['foo_links']).extract()
for link in foo_links:
yield response.follow(link, self.add_foo, meta={'foo_items': self.foo_items})
yield self.load_product_items(response, request.meta['foo_items'])
代码应该做什么: 对于foo_links中的每个链接(第4行),在第一次迭代请求应该在链接1上发送,响应应该在self.add_foo函数中,该函数将返回一个项目,代码将保存在meta中。最后,相同的请求将是yield并且下一次循环迭代开始。
实际发生的事情: 在第一次迭代中,发送请求并且完成和请求中的所有进程都是yield,但是,出乎意料的是,循环中断并且curser转到第一行,这意味着它开始处理下一个响应,依此类推。
我无法理解这种行为。另一方面,如果我不使用yield,那么程序行为就像迭代整个循环一样,并向最后两行迈步,以产生实际的最终结果。
提前致谢。