Ich benutze scrapy, um täglich eine Nachrichtenwebsite zu crawlen. Wie schränke ich scrapy vom Schaben bereits gekratzter URLs ein. Gibt es auch eine klare Dokumentation oder Beispiele auf SgmlLinkExtractor
.Scrapy - wie man bereits geschabte URLs identifiziert
Antwort
Dies ist unkompliziert. Pflegen Sie alle zuvor gecrawlten URLs in python dict. Wenn Sie also versuchen, sie das nächste Mal zu versuchen, sehen Sie, ob diese URL im Diktat vorhanden ist. sonst kriechen.
Der obige Code wurde in SO Texteditor aka Browser eingegeben. Könnte Syntaxfehler haben. Möglicherweise müssen Sie auch einige Änderungen vornehmen. Aber die Logik ist da ...
HINWEIS: Aber Vorsicht, dass einige Websites ständig ihren Inhalt ändern. Manchmal müssen Sie möglicherweise eine bestimmte Webseite (d. H. Dieselbe URL) erneut durchsuchen, um den aktualisierten Inhalt zu erhalten.
Es wäre besser, ein Set als ein Diktat in diesem Fall zu verwenden. –
Sie können tatsächlich tun dies ganz einfach mit dem scrapy Schnipsel hier zu finden: http://snipplr.com/view/67018/middleware-to-avoid-revisiting-already-visited-items/
es zu verwenden, den Code aus dem Link kopieren und in eine Datei in Ihrem scrapy Projekt gesteckt. es zu beziehen, ist eine Zeile in Ihrer settings.py fügen Sie es verweisen:
SPIDER_MIDDLEWARES = { 'project.middlewares.ignore.IgnoreVisitedItems': 560 }
Die Besonderheiten auf, warum Sie die Nummer wählen, die Sie hier lesen werden können: http://doc.scrapy.org/en/latest/topics/downloader-middleware.html
Schließlich Sie‘ Sie müssen Ihre items.py so ändern, dass jede Elementklasse die folgenden Felder hat:
visit_id = Field()
visit_status = Field()
Und ich denke, das ist es. Wenn Sie das Spider-Programm das nächste Mal ausführen, sollte es automatisch versuchen, die gleichen Websites zu meiden.
Viel Glück!
Ich habe alles gemacht wie du erwähnt hast, aber das hat nicht geholfen. Es kriecht immer noch dieselbe URL. –
Der Link erwähnt ist hier: http://snipplr.com/view/67018/middleware-to-avoid-revisiting-already-visited-items/ jetzt. – vrleboss
Nun, ich folgte diesen Schritten, es weist eine visit_id und visit_status als neu. Aber scannt die gleichen Elemente immer wieder in jedem Lauf (und weist dieselbe visit_id und visit_status als neu zu). Irgendwelche Hinweise? – Anshu
Ich denke, Jama22's Antwort ist ein wenig unvollständig.
Im Snippet if self.FILTER_VISITED in x.meta
: können Sie sehen, dass Sie FILTER_VISITED in Ihrer Request-Instanz benötigen, damit diese Anfrage ignoriert wird. Dies stellt sicher, dass Sie zwischen Links, die Sie durchqueren und verschieben möchten, und Element-Links, die Sie nicht sehen möchten, unterscheiden können.
Scrapy kann automatisch URLs filtern, die geschabt werden, nicht wahr? Einige URLs, die auf dieselbe Seite verweisen, werden nicht gefiltert, z. B. "www.xxx.com/home/" und "www.xxx.com/home/index.html".
- 1. Ignorieren bereits besuchte URLs in scrapy
- 2. Wie bekomme ich die Scrapy-Fehler-URLs?
- 3. Wie identifiziert man ITIL-Phasen
- 4. Scrapy Shell und Scrapy Splash
- 5. Wie man Scrapy erzwingt, um doppelte URL zu kriechen?
- 6. Wie identifiziert man das neue iPad
- 7. Wie man einen Prozess eindeutig identifiziert
- 8. Wie identifiziert man die Anfrage über Html.RenderAction()
- 9. Wie identifiziert man den Client als Suchroboter?
- 10. Wie identifiziert man UNIQUELY ein USB-Gerät?
- 11. Wie verwendet man Regeln, restrict_xpaths zum Crawlen und Parsen von URLs mit scrapy?
- 12. scrapy verhindern das Herunterladen von Dateien, wenn bereits heruntergeladen
- 13. Wie identifiziert man die Abhängigkeiten von Conda-Paketen?
- 14. Redirect, wenn bereits über Django URLs eingeloggt?
- 15. Wie man will_paginate URLs ändern?
- 16. Wie bekommt man Twitter URLs?
- 17. Pass zusätzliche Werte zusammen mit URLs zu Scrapy Spider
- 18. scrapy wie man referr url setzt
- 19. Wie implementiert man verschachtelte Artikel in Scrapy?
- 20. wie man Cookies in scrapy überschreibt/verwendet
- 21. scrapy - wie man Text von 'div' bekommt
- 22. Scrapy: Wie man Einstellungen aus settings.py Datei
- 23. Wie kann man eine Scrapy-Pipeline debuggen?
- 24. Scrapy, wie kann man die Zeit pro Domain begrenzen?
- 25. Scrapy Pipeline
- 26. Wie konvertiert man `git:` URLs zu `http:` URLs
- 27. Scrapy: nicht blockierende Pause
- 28. Wie identifiziert man dynamisch erstellte Fenster/Schaltflächen in wxpython?
- 29. Wie identifiziert man "Cluster-Transfer" in einem Panel-Datensatz?
- 30. Wie identifiziert man den im Chiffretext verwendeten Verschlüsselungsalgorithmus?
Um dies zu tun, müssen Sie die URLs speichern, die Sie geschabt haben. Machst du das? Wenn das so ist, wie? –