2017-02-01 9 views
0

Blick auf Scrapys Dokumentation für download_delay und Concurrent_requests, was ich verstehe ist: wenn ich 'CONCURRENT_REQUESTS': 25 und download_delay von 1 Sekunde, das bedeutet, dass einmal scrapy Anfragen 25 Seiten, scrapy wartet auf alle 25 zum Download, dann warten Sie 1 Sekunde und fordern Sie erneut 25 Seiten an. Wenn ich Download_Delay von 0 Sekunden verwende, macht Scrapy dasselbe wie oben ohne 1 Sekunde Verzögerung. Aber wenn ich diese Einstellungen in meinem Scraper verwende, funktioniert das nicht wie erwartet, da meine Netzwerkauslastung bei einer Verzögerung von 0 Sekunden 2,1 Mbps durchschnittlich ist, wenn ich eine Verzögerung von 0 Sekunden verwende, verglichen mit einer Verzögerung von 1 Sekunde, wenn meine Netzwerkauslastung gerade ist Durchschnitt 0,3 Mbit/s (maximal 0,4 Mbit/s). Hier ist mein Code:Scrapy's Download_Delay und gleichzeitige Anfragen funktionieren nicht wie erwartet

class DetailsxxxSpider(scrapy.Spider): 
name = "details" 
allowed_domains = ["www.xxx.com"] 
download_delay = 1 
custom_settings = {'CONCURRENT_REQUESTS': 25} 
def start_requests(self): 
    engine = create_engine('sqlite:///temp.db') 
    Base.metadata.bind = engine 
    DBSession = sessionmaker(bind=engine) 
    session = DBSession() 
    urls = session.query(Temp.url).filter_by(status = "Insert").all() 
    # print urls 
    for url in urls: 
     yield Request(url[0]) 

Crawl-Rate ist 1800 Seiten/Minute Durchschnitt bei 0 Sekunden Verzögerung verwendet wird, und bei der Verwendung von 1 Sekunde Verzögerung ist 43 Seiten/Minute, obwohl die Seiten/Minute Geschwindigkeit ideal 900 Seiten sein sollte/Minute . Es scheint, als würde download_delay pro Anfrage eingerichtet, wenn 1 Sekunde Verzögerung verwendet wird.

Ich verwende Proxies für jede Anfrage, die ich mache. Was vermisse ich? Gibt es eine Möglichkeit, dass ich Delay nach 25 Anfragen auf 1 Sekunde setzen kann. Ich möchte idealerweise die Geschwindigkeit von 900 Seiten/Minute. Jede Hilfe wird geschätzt.

Dank

Antwort

1

Die download_delay ist die Menge an Zeit, die zwischen aufeinanderfolgenden Anfragen von der gleichen Website in Sekunden

Also warten, wenn Sie download_delay = 1 verwenden, werden Sie immer < 60 Seiten haben/Minute. (43 in diesem Fall)

900 Seite/Minute zu erhalten, sollten Sie verwenden:

download_delay < (60/900) < 0,067

Meine Vermutung um zu versuchen, wäre 0,05

+0

Gibt es eine Möglichkeit, die Download-Verzögerung nach 25 Anfragen auf 1 Sekunde zu setzen, anstatt die Verzögerung zwischen den einzelnen aufeinander folgenden Anfragen einzustellen? –

+0

Es scheint nicht, dass dies durch scrappy Einstellungen –

0

Sie können 'DOWNLOAD_DELAY' Option in scrapy oder in Ihrem verwenden custom_settings dict.

+0

getan werden kann Dies bietet keine Antwort auf die Frage. Sobald Sie genug [Reputation] (https://stackoverflow.com/help/whats-reputation) haben, können Sie [jeden Beitrag kommentieren] (https://stackoverflow.com/help/privileges/comment); Stattdessen [geben Sie Antworten, die keine Klärung durch den Fragesteller erfordern] (https://meta.stackexchange.com/questions/214173/why-doe-i-need-50-reputation-to-comment-what-can- i-do-stattdessen). - [Aus Bewertung] (/ review/low-quality-posts/18935914) –

Verwandte Themen