Crawling ist etwas, das größer ist als nur den Inhalt eines einzelnen URIs abzurufen. Wenn Sie nur den Inhalt einiger Seiten abrufen möchten, gibt es keinen wirklichen Vorteil, wenn Sie etwas wie Crawler4J
verwenden.
Schauen wir uns ein Beispiel an. Angenommen, Sie möchten eine Website crawlen. Die Anforderungen wären:
- Give Basis-URI (Startseite)
- alle URIs von jeder Seite nehmen und den Inhalt dieser auch abrufen.
- Verschieben rekursiv für jeden URI, den Sie abrufen.
- Rufen Sie nur den Inhalt von URIs ab, die sich auf dieser Website befinden (es könnte externe URIs geben, die auf eine andere Website verweisen, wir benötigen diese nicht).
- Vermeiden Sie kreisförmiges Crawling. Seite A hat URI für Seite B (derselben Site). Seite B hat URI für Seite A, aber wir haben bereits den Inhalt von Seite A abgerufen (die
About
Seite hat einen Link für die Home
Seite, aber wir haben bereits den Inhalt von Home
Seite, also besuchen Sie es nicht erneut).
- Die Crawling-Operation muss Multithread sein
- Die Website ist riesig. Es enthält viele Seiten. Wir wollen nur 50 URIs ab
Home
Seite abrufen.
Dies ist ein einfaches Szenario. Versuchen Sie, das Problem mit Jsoup
zu lösen. All diese Funktionalität muss von Ihnen implementiert werden. Crawler4J oder irgendein Crawler-Mikro-Framework für diese Angelegenheit würde oder sollte eine Implementierung für die obigen Aktionen haben. Jsoup
's starke Qualitäten leuchten, wenn Sie entscheiden, was mit dem Inhalt zu tun ist.
Werfen wir einen Blick auf einige Anforderungen für das Parsing.
- Erhalten Sie alle Absätze einer Seite
- alle Bilder Get
- ungültige Tags (Tags, die zu den
HTML
Spezifikationen nicht entsprechen) entfernen
- Remove Script-Tags
Hier Jsoup
kommt zum spielen. Natürlich gibt es hier einige Überschneidungen. Einige Dinge sind möglicherweise mit Crawler4J
oder Jsoup
möglich, aber das macht sie nicht gleichwertig. Sie könnten den Mechanismus zum Abrufen von Inhalten aus Jsoup
entfernen und trotzdem ein erstaunliches Werkzeug sein. Wenn Crawler4J
den Abruf entfernen würde, würde es die Hälfte seiner Funktionalität verlieren.
Ich habe beide in einem realen Szenario in einem Projekt verwendet. Ich krabbelte eine Website und nutzte die Stärken von Crawler4J
für alle im ersten Beispiel erwähnten Probleme. Dann übergab ich den Inhalt jeder Seite, die ich abgerufen habe, an Jsoup
, um die benötigten Informationen zu extrahieren. Könnte ich das eine oder das andere nicht benutzt haben? Ja, könnte ich, aber ich hätte alle fehlenden Funktionen implementieren müssen. Der Unterschied, Crawler4J
ist also ein Crawler mit einigen einfachen Operationen zum Parsen (Sie könnten die Bilder in einer Zeile extrahieren), aber es gibt keine Implementierung für komplexe CSS
Abfragen.
Jsoup
ist ein Parser, der Ihnen eine einfache API für HTTP
Anfragen gibt. Für etwas Komplexeres gibt es keine Implementierung.