Python 3.x scrapy yield request.follow实际工作原理

Python 3.x scrapy yield request.follow实际工作原理,python-3.x,scrapy,Python 3.x,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

我是一个新手,无法理解生产过程中的产量

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,那么程序的行为通常类似于迭代整个循环,并逐步向最后两行移动,以产生实际的最终结果


提前谢谢

只是创建
请求
s的快捷方式(与相对URL一起使用,可以从
选择器
s本身提取链接等)。请发布实际代码,而不是一些伪代码,很难理解。现在请检查编辑的代码。see只是创建
Request
s的快捷方式(使用相对URL,可以从
Selector
s本身提取链接等)。请发布实际代码,而不是伪代码,这很难理解。现在检查编辑的代码。请参阅