如何从redis获取正常的URL而不是通过url cPikle转换?

时间:2016-03-21 09:24:16

标签: python redis scrapy scrapy-spider scrapy-pipeline

我使用scrapy-redis简单构建一个分布式爬虫,奴隶机需要读取url表单主队列url,但是有一个问题就是我得到url slave机器是在cPikle转换后的数据,我想得到url来自redis-url-queue是正确的,你有什么建议吗?

示例:

from scrapy_redis.spiders import RedisSpider
from scrapy.spider import Spider
from example.items import ExampleLoader
class MySpider(RedisSpider):
"""Spider that reads urls from redis queue (myspider:start_urls)."""
    name = 'redisspider'
    redis_key = 'wzws:requests'

    def __init__(self, *args, **kwargs):
        super(MySpider, self).__init__(*args, **kwargs)

    def parse(self, response):
        el = ExampleLoader(response=response)
        el.add_xpath('name', '//title[1]/text()')
        el.add_value('url', response.url)
        return el.load_item()

MySpider继承了RedisSpider,当我运行 scrapy runspider myspider_redis.py 时,它发生的不合法网址

scrapy-redis github地址:scrapy-redis

1 个答案:

答案 0 :(得分:1)

scrapy-redis中使用了一些内部队列。一个用于启动网址(默认为<spider>:start_urls),另一个用于共享请求(默认为<spider>:requests),另一个用于dupefilter。

start urls队列和请求队列不能与start urls队列相同,期望单个字符串值和请求队列需要pickle数据。

所以,你不应该在蜘蛛中使用<spider>:requests作为redis_key

如果这有帮助,请告诉我,否则请分享redis_key队列中的消息。