如何在parse_item调用之间传递一些信息?

时间:2014-06-09 12:05:38

标签: scrapy

好的,想象一下有一些列表的网站。此列表中的项目需要一条信息。第二部分位于某个其他网址,这在项目之间是唯一的。

目前我们的抓取工具会打开一个列表页面,抓取每个项目,并为每个项目打开第二个URL并从那里获取第二部分信息。我们使用的请求库几乎在所有情况下都很出色,但现在看起来似乎很慢且无效。看起来整个Twisted被阻止,直到一个'请求'请求结束。

伪码:

def parse_item():
    for item in item_list:
        content2 = requests.get(item['url'])

我们不能让Scrapy解析这些第二个网址,因为我们需要以某种方式“连接”第一个和第二个网址。像Redis这样的东西会起作用,但是嘿,在Scrapy中有没有更好(更简单,更快)的方法呢?我无法相信事情必须如此复杂。

1 个答案:

答案 0 :(得分:2)

您可以在meta

中执行此传递变量

例如:

req = Request(url=http://somedonain.com/path, callback=myfunc)
req.meta['var1'] = 'some value'

yeld(req)

在你的myfunc中,你将传递的变量读作:

myval = response.request.meta['var1']