2015-11-13 31 views
5

aynı örümcek birden çok örneğini başlatırken ederken şaşırıp. 1 örümcek örneği için 1 url gibi çalıştırmak istiyorum. 50k URL'leri işlemek zorundayım ve bunun için her biri için ayrı örnekleri başlatmam gerekiyor. benim ana örümcek komut dosyasında, ben uzun zamandır tarama değilim emin olmak için, 7 dakika closedpider timeut belirledik.Scrapy - Aynı örümcek işleminin birden çok örneğini nasıl başlatırsınız?

from scrapy.crawler import CrawlerProcess 
from scrapy.utils.project import get_project_settings 
import urlparse 

for start_url in all_urls: 
    domain = urlparse.urlparse(start_url).netloc 
    if domain.startswith('ww'): 
     domain = domain.split(".",1)[1] 

    process = CrawlerProcess(get_project_settings()) 
    process.crawl('textextractor', start_url=start_url,allowed_domains=domain) 
    process.start() 

O 1 url için tamamen çalışır bur 2 url geçirildiğinde bundan sonra bu hata aşağıda verir: Aşağıdaki kodu bakınız

raise error.ReactorNotRestartable() 
ReactorNotRestartable 

bunu yapmak için ne yapması gerektiğini önermek Lütfen Aynı örümceğin birden çok örneğini çalıştırmak için Ayrıca, konuları kullanarak bir kerede birden fazla scrapy örneğini başlatmayı düşünüyorum. Bu iyi bir yaklaşım mı?

+0

Herhangi güncelleme hakkında? – UriCS

cevap

0

nasıl bu konuda bu

process = CrawlerProcess(get_project_settings()) 

for start_url in all_urls: 
    domain = urlparse.urlparse(start_url).netloc 
    if domain.startswith('ww'): 
     domain = domain.split(".",1)[1] 
    process.crawl('textextractor', start_url=start_url,allowed_domains=domain) 

process.start() 
+0

furas Çözümünüzle test ettim, ancak doğru sonuçları sağlamaz.Bu çözüm, "ReactorNotRestartable" hatası vermeden birden çok örneği başlatır, ancak yalnızca son geçiş URL'sini tarar ve diğer URL'ler için tarama yapmaya başlar ancak 1'den fazla url taramayın ve örümceği bitirir. Bu URL'leri ayrı ayrı kontrol ettim ve bunlar üzerinde taranan bir sürü veriyi geri döndürüyorlar. Artı, bahsettiğim gibi, bunu yapmak için 50k url'ler için bunu yapmak zorundayım demektir, aynı anda 50k urller için taramayı başlatıyorum. İyi bir yaklaşım gibi görünüyor mu? – user3721618

İlgili konular