2016-10-13 7 views
1

Ich habe ein Scrapy-Projekt, das 1 Millionen Produkt-IDs aus der Datenbank liest und dann beginnt, Produktdetails basierend auf ID von einer Website zu scrapen.Führen Sie mehrere Prozesse eines Scrapy Spider

Mein Spider ist voll funktionsfähig.

Ich möchte 10 Instanzen von Spider mit jeweils einer gleichen Anzahl von Produkt-IDs ausgeführt werden.

Ich kann es tun wie,

SELECT COUNT(*) FROM product_ids und dann teilen sie durch 10 und dann tun

SELECT * FROM product_ids LIMIT 0, N und so weiter

Ich habe eine Idee, die ich es im Terminal tun können, indem LIMIT in scrapy Befehl wie scrapy crawl my_spider scrape=1000 und so weiter.

Aber ich möchte es in Spider machen, also lasse ich meine Spinne nur einmal laufen und dann laufen 10 weitere Prozesse derselben Spinne innerhalb der Spinne.

+0

Meiner Meinung nach sollte diese Logik außerhalb der Scrapy Spinne bleiben. Gewöhnliche Art, dies zu tun, besteht darin, einfach ein Bash-Skript zu schreiben, um eine Datei, die URLs enthält, zu "trennen" und dann nacheinander durch diese Dateien zu iterieren und für jeden Start einen Scrapy-Spider mit einem Argument, das diese Datei ist: scrapy crawl -a file = xab' – Granitosaurus

+0

Ich bin gut in PHP, also kann ich ein PHP-Skript dafür schreiben ... :) gute suggstion – Umair

Antwort

2

Eine Möglichkeit, dies zu tun, ist mit CrawlerProcess Hilfsklasse oder CrawlerRunner Klasse.

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

Es läuft mehrere Spinnen im selben Prozess nicht mehrere Prozesse.

Verwandte Themen