2016-10-13 3 views
1

У меня есть проект Scrapy, который считывает 1 миллион идентификаторов продукта из базы данных, а затем начинает очищать информацию о продукте на основе ID с веб-сайта.Запуск нескольких процессов Scrapy Spider

My Spider полностью работает.

Я хочу запустить 10 экземпляров Spider, каждому из которых присвоено одинаковое количество идентификаторов продуктов.

я могу это сделать, как,

SELECT COUNT(*) FROM product_ids, а затем разделить его на 10, а затем сделать

SELECT * FROM product_ids LIMIT 0, N и так далее

У меня есть идея, я могу сделать это в терминале, передавая LIMIT в scrapy command как scrapy crawl my_spider scrape=1000 и так далее.

Но я хочу сделать это в Spider, поэтому я просто запускаю своего Паука только один раз, а затем он запускает еще 10 процессов одного и того же паука внутри паука.

+0

По-моему, эта логика должна оставаться за пределами паутины. Обычный способ сделать это - просто написать сценарий bash для unix 'split' файла, который содержит URL-адреса, а затем перебирать эти файлы по одному и для каждого запуска scipping spider с аргументом, который является этим файлом:' scrapy crawl -a file = xab' – Granitosaurus

+0

Я хорошо разбираюсь в PHP, поэтому я могу написать PHP-скрипт для этого ... :) good suggeststion – Umair

ответ

2

Один из способов сделать это с помощью CrawlerProcess вспомогательного класса или CrawlerRunner класса.

import scrapy 
from scrapy.crawler import CrawlerProcess 

class Spider1(scrapy.Spider): 
    # Your first spider definition 

process = CrawlerProcess() 
process.crawl(Spider1) 
process.crawl(Spider1) 
process.start() 

Он управляет несколькими пауками в том же процессе, что и несколько процессов.

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