我试图遍历从传递给scrapy请求的回调返回的URL的列表,但得到以下错误:
TypeError: 'Request' object is not iterable
下面的工作。我可以看到所有提取的网址淹没在终端上:
^{pr2}$但是如果我将yield samplePacks
行替换为:
def parse(self, resp):
for genre in self.genres(resp):
samplePacks = scrapy.Request(genre['url'], callback=self.extractSamplePackURLs)
for pack in samplePacks:
yield pack
。。。我得到了上面我发布的错误。在
为什么会这样?我如何循环回调的返回值?在
在
scrapy.Spider
回调中生成Request
对象只告诉Scrapy framework对HTTP请求进行排队。它生成HTTP请求对象,仅此而已。它不会立即下载它们。或者把控制权还给他们,直到他们被下载,也就是说,在收益率之后,你仍然没有结果。Request
对象不是承诺、期货、延期。Scrapy的设计不同于各种异步框架。在这些
Request
对象最终将由框架的下载程序处理,来自每个HTTP请求的响应体将被传递到相关的回调。 这是Scrapy异步编程模式的基础。在如果您想做一些更“过程化”的事情,其中
yield request(...)
在下一次您拥有控制权时获得HTTP响应,那么您可以查看一下https://github.com/rmax/scrapy-inline-requests/。在相关问题 更多 >
编程相关推荐