Ich verwende Scrapy, insbesondere CrawlSpider
Klasse Scrapy Web-Links zu kratzen, die bestimmte Schlüsselwörter enthalten. Ich habe eine ziemlich lange start_urls
Liste, die ihre Einträge von einer SQLite-Datenbank erhält, die mit einem Django-Projekt verbunden ist. Ich möchte die abgeschabten Weblinks in dieser Datenbank speichern.Zugriff auf eine bestimmte start_url in einem Scrapy CrawlSpider?
Ich habe zwei Modelle Django, ein für den Start Urls wie http://example.com
und eine für die geschabt Web-Links wie http://example.com/website1
, http://example.com/website2
usw. Alle geschabt Web-Links sind subsites einer des Start-URLs in der Liste start_urls
.
Das Web-Links-Modell hat eine Viele-zu-Eins-Beziehung zum Start-URL-Modell, d. H. Das Web-Links-Modell hat einen Fremdschlüssel zum Start-URL-Modell. Um meine geschabten Weblinks korrekt in der Datenbank zu speichern, muss ich die Methode parse_item()
mitteilen, welche Startadresse die gesperrte Webverbindung enthält. Wie kann ich das machen? Scrapys DjangoItem
Klasse hilft in dieser Hinsicht nicht, da ich die verwendete Start-URL immer noch explizit definieren muss.
Mit anderen Worten, wie kann ich die aktuell verwendete Start-URL an die parse_item()
-Methode übergeben, so dass ich es zusammen mit den entsprechenden ausgekratzten Web-Links in die Datenbank speichern kann? Irgendwelche Ideen? Danke im Voraus!
Können Sie haben das START_URL Feld in derselben Tabelle wie die Web-Links-Tabelle (wie in der DjangoItem Sie verwenden)?Sicher, es wird redundante Denormalisierung schaffen, aber wenn Sie vermeiden möchten, explizit aufzurufen, könnte dies helfen. – zubinmehta