2015-11-13 6 views
5

Я застреваю при запуске нескольких экземпляров одного и того же паука. Я хочу запустить его, как 1 url для 1 spider instance. Я должен обработать URL-адреса 50k, и для этого мне нужно инициировать отдельные экземпляры для каждого. В моем главном сценарии пауков я установил timepider timeut в течение 7 минут, чтобы убедиться, что я не сканируюсь в течение длительного времени. Пожалуйста, смотрите код ниже:Scrapy - Как инициировать несколько экземпляров одного и того же процесса паука?

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() 

Он работает полностью на 1 URL, бур после того, что при прохождении второй URL он дает ниже ошибки:

raise error.ReactorNotRestartable() 
ReactorNotRestartable 

Просьба предложить то, что я должен сделать, чтобы сделать его для нескольких экземпляров одного и того же паука. Кроме того, я собираюсь инициировать несколько экземпляров scrapy за один раз с помощью потоков. Будет ли это прекрасный подход?

+0

Любое обновление по этому вопросу? – UriCS

ответ

0

Как об этом

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

Я тестировал ваше решение, но оно не дает правильных результатов. Это решение инициирует несколько экземпляров без предоставления '' 'ReactorNotRestartable''' ошибки, но оно полностью сканирует последний переданный URL-адрес, а для других URL-адресов он начинает сканирование, но не ползайте более чем на 1 url и заканчивайте паука. Я проверил эти URL отдельно, и они возвращают много обходных данных. Плюс, как я уже упомянул, я должен сделать это за 50k URL-адресов делает это означает, что я начну процесс сканирования по 50k URL-адресам сразу? Это прекрасный подход? – user3721618

Смежные вопросы