【发布时间】:2016-02-26 06:32:21
【问题描述】:
我正在使用https://github.com/rolando/scrapy-redis 创建一个从 Redis 列表中读取 URL 的蜘蛛。我遇到的问题是我想在每个 URL 旁边发送一个唯一 ID。这样我就可以再次识别数据库中的条目。
我在 redis 中的列表是这样的: http://google.com[someuniqueid] http://example.com[anotheruniqueid]
默认情况下,Scrapy-redis 仅从 redis 读取一个 url,然后将其发送给蜘蛛。
我在里面修改:https://github.com/rolando/scrapy-redis/blob/master/scrapy_redis/spiders.py
并改变了这个功能:
def next_request(self):
"""Returns a request to be scheduled or none."""
url = self.server.lpop(self.redis_key)
if url:
mm = url.split("[")
self.guid = mm[1].replace("]", "")
return self.make_requests_from_url(mm[0])
这行得通,我可以通过调用获取蜘蛛内部的 guid:
print self.guid
然而,问题在于它似乎混淆了 guid。我并不总是为每个 url 提供正确的 guid。
我应该如何将 guid 发送给我的蜘蛛?
【问题讨论】:
-
可能您将 guid 定义为共享变量(在 init 之外,在它之上)。由于异步并且只有一种方法来保存一个值。只是猜测
-
我应该把它放在哪里? :)
标签: python scrapy web-crawler bots scrapy-spider