2016-03-21 3 views
1

Ich benutze scrapy-redis einfach, um einen verteilter Crawler zu bauen, muss Slave-Maschine Url Formular Master-Warteschlange URL lesen, aber es gibt ein Problem ist, dass ich zum url slave machine ist nach cPikle konvertiert daten, ich möchte url von redis-url-queue ist richtig, was schlägst du vor?Wie bekomme ich eine normale URL von redis anstatt durch url cPikle konvertiert?

Beispiel:

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 die RedisSpider geerbt, als ich scrapy runspider myspider_redis.py laufen es nicht legal url tritt

scrapy-redis Github-Adresse: scrapy-redis

+0

können Sie Protokolle teilen? – eLRuLL

+0

Ja, ich kann Protokolle abrufen NotSupported: Nicht unterstütztes URL-Schema '': Kein Handler für dieses Schema verfügbar, die URL ist cPikle-Daten, die ich bekomme – rowele

Antwort

1

Es gibt einige interne Warteschlangen, die in scrapy-redis verwendet werden. Einer ist für Start-URLs (standardmäßig <spider>:start_urls), andere für gemeinsame Anforderungen (standardmäßig <spider>:requests) und ein anderer für den Dupefilter.

Die Start-URLs-Warteschlange und die Anforderungswarteschlange können nicht mit der Start-URLs identisch sein. Die Warteschlange erwartet einzelne Zeichenfolgewerte, und die Anforderungswarteschlange erwartet eingelegte Daten.

Sie sollten also nicht <spider>:requests als redis_key im Spider verwenden.

Lassen Sie mich wissen, wenn dies hilft, andernfalls teilen Sie die Nachrichten in der redis_key Warteschlange.

+0

Nun, ich konow. Danke – rowele

Verwandte Themen