scrapy如何产生request.follow实际上有效

时间:2017-07-14 04:20:02

标签: python-3.x scrapy

我是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,那么程序行为就像迭代整个循环一样,并向最后两行迈步,以产生实际的最终结果。

提前致谢。

0 个答案:

没有答案