1

我用scrapy-redis简单搭建了一个分布式爬虫,从机需要从主队列url中读取url,但是有个问题是我拿到url从机是cPikle转换数据后,我想从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时,它会出现不合法的 url

scrapy-redis github地址:scrapy-redis

4

1 回答 1

1

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

起始 urls 队列和请求队列不能相同,因为起始 urls 队列需要单个字符串值,而请求队列需要腌制数据。

所以,你不应该在蜘蛛中使用<spider>:requestsas 。redis_key

让我知道这是否有帮助,否则请分享redis_key队列中的消息。

于 2016-03-25T00:54:05.003 回答