2017-04-09 6 views
-1

Ich baue einen Web-Crawler, bei dem der Benutzer die URL in ein Skript eingibt, das er zuerst ausführt, dann führt das Skript den Crawler mit der darin eingegebenen Domäne aus. Ich muss etwas putzen, aber ich muss den Protoyp in Schwung bringen. Ich habe den Code erstellt und was passiert, ist, dass das Crawler-Skript nach der URL fragt. Ich habe versucht, die Terminalbefehle zu benutzen, um sie einzugeben, aber ich denke nicht, dass mein Code damit kompatibel ist. Gibt es eine bessere Möglichkeit, Domänen, die von einem Endbenutzer eingegeben wurden, von einem anderen Skript weiterzugeben?Übergabe der Domäne an den Scrapy Web-Crawler

Ich führe es nur durch Ausführen des ersten Skripts über das Terminal. Einige helfen herauszufinden, wie man eine Domain als Variable übergeben kann.

Antwort

1

die start_requests Methode verwenden, statt start_urls:

def start_requests(self): 
    yield Request(url=self.user_input) 

... 

Entfernen Sie auch die allowed_domains Klassenvariable, so dass die Spinne alle Domänen erlauben kann, die es braucht.

diese Weise können Sie nur die Spinne mit scrapy crawl myspider -a user_input="http://example.com"

+0

Problem nennen kann, ist, dass mein Ziel, einen Crawler zu machen ist, die Links von der Domäne und verstehen sich inklusive Domänen außerhalb der angeforderten Domain nur enthält. Ich führe das auch als eine einzelne Crawler-Datei aus, anstatt Crawler zu erstellen. Ich habe Ihre Lösung versucht und ich bekomme 'NameError: globaler Name 'Anfrage' ist nicht definiert 'Fehler im Skript. – George

+0

@George 'von Scrapy Import Request'. Die 'start_requests' Methode muss ein' Request' Objekt zurückgeben, um den Crawl zu starten, standardmäßig durchläuft sie 'start_urls' und liefert ein 'Request' Objekt für jede URL in der Liste. – Granitosaurus

+0

@Granitosaurus Ja, ich wusste nicht, dass ich das brauchte. Ich habe das hinzugefügt und es hat angefangen zu funktionieren. Mein einziges anderes Problem ist, dass ich die erlaubten Domains darin brauche, um crawlende URLs für dieselbe Domain einzuschränken. Also muss ich noch herausfinden, wie man Variablen aus einem separaten Skript übergibt. Oder etwas anderes herausfinden. – George

Verwandte Themen