Crawler4j vs. Jsoup für die Seiten Crawlen und Parsen in Java

7

Ich möchte den Inhalt einer Seite erhalten und die spezifischen Teile daraus extrahieren. Soweit ich weiß, gibt es mindestens zwei Lösungen für diese Aufgabe: Crawler4j und Jsoup .

Beide können den Inhalt einer Seite abrufen und Unterabschnitte daraus extrahieren. Das einzige, was ich nicht verstehe, was ist der Unterschied zwischen ihnen? Es gibt eine ähnliche Frage , die als beantwortet markiert ist:

  

Crawler4j ist ein Crawler, Jsoup ist ein Parser.

Aber ich habe gerade überprüft, dass Jsoup 1.8.3 zusätzlich zu einer Parsing-Funktion auch eine Seite crawlen kann, während Crawler4j nicht nur die Seite crawlen, sondern auch ihren Inhalt analysieren kann.

Können Sie also bitte den Unterschied zwischen Crawler4j und Jsoup klären?

    
Mike B. 19.01.2016, 22:55
quelle

1 Antwort

20

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, ist es nicht sinnvoll, etwas wie Crawler4J zu verwenden.

Sehen wir uns ein Beispiel an. Angenommen, Sie möchten eine Website crawlen. Die Anforderungen wären:

  1. Geben Sie den Basis-URI (Homepage)
  2. ein
  3. Nehmen Sie alle URIs von jeder Seite und rufen Sie deren Inhalte ab.
  4. Für jeden abgerufenen URI wird rekursiv verschoben.
  5. 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 brauchen diese nicht).
  6. 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 Seite Home , aber wir haben bereits den Inhalt von Home Seite, also besuchen Sie ihn nicht nochmal).
  7. Der Crawling-Vorgang muss Multithread sein
  8. Die Website ist riesig. Es enthält viele Seiten. Wir möchten nur 50 URIs ab Home Seite abrufen.

Dies ist ein einfaches Szenario. Versuche das 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. Die starken Qualitäten von Jsoup glänzen, wenn Sie entscheiden müssen, was Sie mit dem Inhalt machen wollen.

Sehen wir uns einige Anforderungen für das Parsing an.

  1. Alle Absätze einer Seite abrufen
  2. Alle Bilder abrufen
  3. Entfernen Sie ungültige Tags (Tags, die nicht den HTML -Spezifikationen entsprechen)
  4. Skript-Tags entfernen

Hier kommt Jsoup zum Einsatz. 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 im selben Projekt in einem realen Szenario verwendet. Ich habe eine Website gecrawlt und dabei die Stärken von Crawler4J für alle im ersten Beispiel erwähnten Probleme genutzt. Dann habe ich den Inhalt jeder Seite, die ich abgerufen habe, an Jsoup übergeben, 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.

Daher ist der Unterschied, Crawler4J , 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 bietet. Für etwas Komplexeres gibt es keine Implementierung.

    
alkis 20.01.2016, 05:57
quelle