2017-04-24 1 views
2

Ich hatte Cracling eine E-Commerce-Website mit Scrapy und die Crawling-Geschwindigkeit, die ich bekomme ist 50 ~ 60 Seiten/Minute. Ich benutze 8-Core-Linode-Server mit 24 GB Ram, also glaube ich nicht, Netzwerk oder Server könnte der Grund sein.Scrapy Crawling Geschwindigkeit ist langsam

Ich bin bewusst, dass die einige Websites herunterladen Latenz geben, wenn wir sie zu oft kriechen, aber das ist eine große Website und ich bin mit proxymesh Proxies zu, so könnte dies auch nicht möglicherweise der Grund sein.

Ich glaube, ich etwas in settings.py Datei bin fehlt -

BOT_NAME = 'scraper' 

SPIDER_MODULES = ['com.crawler.scraper.spiders'] 
NEWSPIDER_MODULE = 'com.crawler.scraper.spiders' 

ITEM_PIPELINES = { 
    'com.crawler.scraper.pipelines.generic_pipeline.Pipeline': 300 
} 
RANDOMIZE_DOWNLOAD_DELAY = False 
COOKIES_ENABLED = False 
CONCURRENT_ITEMS = 200 
CONCURRENT_REQUESTS=50 
DOWNLOAD_DELAY= 0 
CONCURRENT_REQUESTS_PER_DOMAIN=50 
LOG_LEVEL = 'ERROR' 
RETRY_TIMES = 2 
CONNECTION_TIMEOUT = 30 
USER_AGENT_LIST = 'user_agents.txt' 

DOWNLOADER_MIDDLEWARES = { 
    'random_useragent.RandomUserAgentMiddleware': 400, 
    'com.crawler.scraper.middlewares.proxy_middleware.ProxyMiddleware': 410, 
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None, 
} 

ich von DOWNLOAD_DELAY gestartet 5 und jetzt sogar habe ich es als 0 gehalten, aber dennoch konnte ich keine signifikante Veränderung sehen in die Anzahl der Anfragen pro Minute.

Also, meine Fragen sind ->

1) Was kann ich tun, um die Geschwindigkeit zu mindestens 200 Anfragen/min zu erhöhen? 2) Was sollte der ideale Wert für CONCURRENT_ITEMS sein?

+0

Wie hoch ist die durchschnittliche Antwortzeit für eine einzelne Seite? 50-60 U/min ist bereits erhebliche Belastung für einen einzelnen Client. – jordanm

+0

Aber wenn ich dynamische Proxies verwende, kann die Website nicht erkennen, dass die Anfragen vom gleichen Client kommen, und die Website ist Amazon, und ich habe gesehen, wie andere mit einer viel höheren Geschwindigkeit crawlen, @jordanm – sagar

+0

Ist die [AutoThrottle Erweiterung] (https://docs.scrapy.org/en/latest/topics/autothrottle.html) ein oder aus? Sie können es deaktivieren und prüfen, ob es einen Unterschied macht. –

Antwort

1

CONCURRENT_ITEMS ist definitiv nicht die Lösung, da diese Einstellung nur Auswirkungen auf die Verarbeitungszeit hat, die auf dem Server verwendet wird. Angesichts Ihrer Serverspezifikationen sollte das überhaupt keinen Unterschied machen.

Abgesehen davon, dass Ihre Einstellungen in Ordnung sind, sollte Ihr Scraper so schnell gehen, wie die Website reagiert. (selbst wenn DOWNLOAD_DELAY auf 1 gesetzt wird, hätte der Schaber die Möglichkeit, 50 x 60 = 3000 Anfragen pro Minute zu machen)

Oh, und RANDOMIZE_DOWNLOAD_DELAY sollte auch auf True gesetzt werden, nur um sicher zu gehen.

Abhängig von der Anzahl der verwendeten Proxies ist es sehr wahrscheinlich, dass die Zielseite Ihren Scraper drosselt.

Bei der aktuellen Geschwindigkeit, wenn Sie den kleinsten 20 IP-Plan von ProxyMesh verwenden, würden Sie alle 20 Sekunden von derselben IP-Adresse aus auf die Site zugreifen. Wenn Sie ihren 100-IP-Plan verwenden, senden Sie immer noch alle 100 bis 120 Sekunden eine Anforderung von jedem IP.

Wenn Sie dies über einen längeren Zeitraum tun, ist dies schnell genug, um Ihre ProxyMesh-IPs zu drosseln. Ich würde auch spekulieren, dass dein Scraper beim Start schneller war und deswegen gedrosselt wurde.

Möglichkeiten, meine Theorie zu überprüfen: entweder fügen Sie mehr IPs hinzu und die Geschwindigkeit sollte dementsprechend erhöhen oder 24 Stunden warten, bis ProxyMesh Ihnen neue IPs zugewiesen hat und dann den Scraper erneut ausführen und beobachten, ob es viel schneller startet und dann gedrosselt wird.

+0

nur um die Dinge mehr zu klären, verwende ich proxymesh Welt-Proxy, der eine sehr große Menge an IPs gibt (nicht sicher von der Anzahl). – sagar

+0

Soweit ich die Preisstruktur von proxymesh verstehe, begrenzen sie Ihre Anzahl von IPs pro Tag und rotieren sie nach 24 Stunden. Somit steht Ihnen nur ein Bruchteil der vollen 15.000 IPs des proxymesh Weltproxys an einem einzigen Tag zur Verfügung (es sei denn, Sie haben sich für einen inoffiziellen Plan registriert, den sie nicht auf ihrer Site aufführen) – rrschmidt

Verwandte Themen