Das Erstellen eines Webcrawlers ist eine clevere Möglichkeit, nützliche Informationen abzurufen, die online verfügbar sind. Mit einem Webcrawler können Sie das Internet scannen, einzelne Websites durchsuchen und deren Inhalt analysieren und extrahieren.

Mit der Programmiersprache Java können Sie ganz einfach einen Webcrawler erstellen und Daten von Websites sammeln. Sie können die extrahierten Daten für verschiedene Anwendungsfälle verwenden, z. B. für Analysezwecke, zum Bereitstellen eines Dienstes, der Daten von Drittanbietern verwendet, oder zum Generieren statistischer Daten.

In diesem Artikel führen wir Sie durch den Prozess zum Erstellen eines Webcrawlers mit Java und Crawlbase.

Was du brauchen wirst

Normalerweise umfasst das Crawlen von Webdaten die Erstellung eines Skripts, das eine Anfrage an die Zielwebseite sendet, auf den zugrunde liegenden HTML-Code zugreift und die erforderlichen Informationen extrahiert.

Um dieses Ziel zu erreichen, benötigen Sie Folgendes:

Bevor wir die Crawling-Logik entwickeln, wollen wir klären, warum die Verwendung von Crawlbase für das Web-Crawling wichtig ist.

Warum Crawlbase zum Crawlen verwenden?

Crawlbase ist ein leistungsstarkes Tool zum Crawlen und Scrapen von Daten, mit dem Sie schnell und einfach Informationen von Websites sammeln können.

Hier sind einige Gründe, warum Sie es zum Crawlen von Online-Daten verwenden sollten:

  • Einfach zu bedienen: Es verfügt über eine einfache API, die Sie ohne Programmierkenntnisse schnell einrichten können. Mit nur wenigen Codezeilen können Sie die API verwenden, um Websites zu crawlen und deren Inhalte abzurufen.

  • Unterstützt erweitertes Crawling Mit Crawlbase können Sie erweiterte Web-Crawling-Aktivitäten durchführen und Daten von komplizierten Websites extrahieren. Da Crawlbase JavaScript-Rendering unterstützt, können Sie Daten von dynamischen Websites extrahieren. Es bietet einen Headless-Browser, mit dem Sie extrahieren können, was echte Benutzer in ihren Webbrowsern sehen – selbst wenn eine Site mit modernen Frameworks wie Angular oder React.js erstellt wurde.

  • Umgehung von Kriechhindernissen Crawlbase kann mit allen Einschränkungen umgehen, die häufig mit dem Crawlen von Online-Daten verbunden sind. Es verfügt über ein umfangreiches Proxy-Netzwerk sowie über 17 Rechenzentren auf der ganzen Welt. Sie können damit Zugriffsbeschränkungen umgehen, CAPTCHAs lösen und andere Anti-Scraping-Maßnahmen umgehen, die von Webanwendungen implementiert werden. Darüber hinaus können Sie Websites crawlen und dabei anonym bleiben; Sie müssen sich keine Sorgen machen, dass Ihre Identität preisgegeben wird.

  • Kostenloser Testaccount Sie können die Funktionsweise von Crawlbase testen, ohne Ihre Zahlungsdaten preiszugeben. Das kostenlose Konto beinhaltet 1,000 Credits zum Ausprobieren der Funktionen des Tools.

So funktioniert Crawlbase

Crawlbase bietet die Crawling API zum Crawlen und Scrapen von Daten von Websites. Sie können die API ganz einfach in Ihre Java-Entwicklung Projizieren und rufen Sie Informationen problemlos von Webseiten ab.

Jede Anfrage an die Crawling API beginnt mit folgendem Basisteil:

1
https://api.crawlbase.com

Außerdem müssen Sie der API die folgenden obligatorischen Parameter hinzufügen:

  • Authentifizierungstoken
  • URL

Das Authentifizierungstoken ist ein einzigartiges Token, das Sie zur Nutzung des Crawling APISobald Sie sich für ein Konto anmelden, erhalten Sie von Crawlbase zwei Arten von Token:

  • Normales Token Dies dient zum Stellen allgemeiner Crawling-Anfragen.
  • JavaScript-Token Dies dient zum Crawlen dynamischer Websites. Es bietet Ihnen Headless-Browser-Funktionen zum Crawlen von Webseiten, die mit JavaScript gerendert werden. Wie bereits erwähnt, ist dies eine nützliche Methode zum Crawlen komplexer Websites.

So fügen Sie Ihrer API-Anfrage das Authentifizierungstoken hinzu:

1
https://api.crawlbase.com/?token=INSERT_TOKEN

Der zweite obligatorische Parameter ist die zu crawlende URL. Sie sollte mit HTTP oder HTTPS beginnen und vollständig codiert sein. Durch die Codierung wird die URL-Zeichenfolge in ein Format konvertiert, das gültig und einfach über das Internet übertragen werden kann.

So fügen Sie die URL in Ihre API-Anfrage ein:

1
https://api.crawlbase.com/?token=INSERT_TOKEN&url=INSERT_URL

Wenn Sie die obige Zeile ausführen, beispielsweise auf Ihrem Terminal mit cURL oder indem Sie sie in die Adressleiste eines Browsers einfügen, wird die API-Anforderung ausgeführt und der gesamte HTML-Quellcode der Zielwebseite zurückgegeben.

So einfach und leicht geht das!

Wenn Sie erweitertes Crawling durchführen möchten, können Sie weitere Parameter zur API-Anforderung. Wenn Sie beispielsweise das JavaScript-Token verwenden, können Sie das Seite_warten Parameter, um den Browser anzuweisen, die angegebene Anzahl von Millisekunden zu warten, bevor der resultierende HTML-Code erfasst wird.

Hier ist ein Beispiel:

1
https://api.crawlbase.com/?token=INSERT_TOKEN&page_wait=1000&url=INSERT_URL

Erstellen eines Webs Crawler in Java und Crawlbase

In diesem Java-Web-Crawling-Tutorial verwenden wir die HttpClient API um die Crawling-Logik zu erstellen. Die API wurde in Java 11 eingeführt und bietet viele nützliche Funktionen zum Senden von Anfragen und Abrufen der Antworten.

HTTP-Client-API

Die HttpClient-API unterstützt sowohl HTTP/1.1 als auch HTTP/2. Standardmäßig wird das HTTP/2-Protokoll zum Senden von Anfragen verwendet. Wenn eine Anfrage an einen Server gesendet wird, der HTTP/2 noch nicht unterstützt, wird sie automatisch auf HTTP/1 heruntergestuft.

Darüber hinaus können seine Anfragen asynchron oder synchron gesendet werden, es behandelt Anfragen und Antworttexte als reaktive Streamsund verwendet das allgemeine Builder-Muster.

Die API besteht aus drei Kernklassen:

  • HTTP-Anfrage
  • HttpClient
  • HttpResponse

Lassen Sie uns ausführlicher über jeden von ihnen sprechen.

1. HTTP-Anfrage

Die HttpRequest ist, wie der Name schon sagt, ein Objekt, das die zu sendende HTTP-Anforderung kapselt. Um neue Instanzen von HttpRequest zu erstellen, rufen Sie auf HttpRequest.newBuilder(). Nach der Erstellung ist die Anfrage unveränderlich und kann mehrfach gesendet werden.

Die Werft Klasse verfügt über verschiedene Methoden zum Konfigurieren der Anforderung.

Dies sind die gängigsten Methoden:

  • URI-Methode
  • Anforderungsmethode
  • Protokollversionsmethode
  • Timeout-Methode

Lassen Sie uns ausführlicher über jeden von ihnen sprechen.

a) URI-Methode

Das erste, was Sie bei der Konfiguration der Anfrage tun müssen, ist die URL für den Crawl festzulegen. Dies können wir tun, indem wir den uri() Methode auf der Werft Instanz. Wir verwenden auch die URI.erstellen() Methode zum Erstellen der URI durch Parsen der Zeichenfolge der URL, die wir crawlen möchten.

Hier ist der Code:

1
2
3
4
5
6
7
Schnur URL =
URLEncoder.encode(„https://www.forextradingbig.com/7-reasons-why-you-should
-den Devisenhandel aufgeben/", StandardCharsets.UTF_8.name());

HTTP-Anfrage Anforderung = HttpRequest.newBuilder()
.uri(URI.erstellen("https://api.crawlbase.com/?token=INSERT_TOKEN&url="
+ URL))

Beachten Sie, dass wir die URL-Zeichenfolge mithilfe der Crawlbase-Einstellungen bereitgestellt haben. Dies ist die Wir beabsichtigen, den Inhalt dieser Webseite zu scrapen.

Wir haben die URL auch kodiert mit dem Java URLEncoder-Klasse. Wie bereits erwähnt, erfordert Crawlbase die Codierung von URLs.

b) Anfragemethode

Als nächstes müssen Sie die HTTP-Methode angeben, die für die Anforderung verwendet werden soll. Wir können eine der folgenden Methoden aufrufen von Werft:

  • ERHALTEN()
  • POST()
  • SETZEN()
  • LÖSCHEN()

Da wir in diesem Fall Daten von der Zielwebseite anfordern möchten, verwenden wir die ERHALTEN() Methode.

Hier ist der Code:

1
2
HTTP-Anfrage Anforderung = HttpRequest.newBuilder()
.ERHALTEN()

Bisher verfügt HttpRequest über alle Parameter, die an HttpClient übergeben werden sollen. Möglicherweise müssen Sie jedoch noch weitere Parameter hinzufügen, z. B. die HTTP-Protokollversion und das Timeout.

Sehen wir uns an, wie Sie die zusätzlichen Parameter hinzufügen können.

c) Protokollversionsmethode

Wie bereits erwähnt, verwendet die HttpClient-API standardmäßig das HTTP/2-Protokoll. Sie können jedoch die Version des HTTP-Protokolls angeben, die Sie verwenden möchten.

Hier ist der Code:

1
2
HTTP-Anfrage Anforderung = HttpRequest.newBuilder()
.version(HttpClient.Version.HTTP_2)

d) Timeout-Methode

Sie können die Zeitspanne festlegen, die gewartet werden soll, bevor eine Antwort empfangen wird. Nach Ablauf der definierten Zeitspanne wird ein HttpTimeoutException wird ausgelöst. Standardmäßig ist das Timeout auf unendlich eingestellt.

Sie können ein Timeout definieren, indem Sie die Methode timeout() der Builder-Instanz aufrufen. Sie müssen außerdem die Dauer Objekt, um die Wartezeit anzugeben.

Hier ist der Code:

1
2
HTTP-Anfrage Anforderung = HttpRequest.newBuilder()
.timeout(Dauer.vonSekunden(20))

2. HttpClient

Die HttpClient-Klasse ist der Haupteinstiegspunkt der API. Sie fungiert als Container für die Konfigurationsdetails, die von mehreren Anfragen gemeinsam genutzt werden. Sie ist der HTTP-Client, der zum Senden von Anfragen und Empfangen von Antworten verwendet wird.

Sie können entweder anrufen unter HttpClient.newBuilder() oder unter der HttpClient.newHttpClient() Methode, um es zu instanziieren. Nachdem eine Instanz des HttpClient erstellt wurde, ist sie unveränderlich.

Die HttpClient-Klasse bietet mehrere hilfreiche und selbstbeschreibende Methoden, die Sie beim Arbeiten mit Anfragen und Antworten verwenden können.

Dies sind einige Dinge, die Sie tun können:

  • Protokollversion festlegen
  • Umleitungsrichtlinie festlegen
  • Senden synchroner und asynchroner Anfragen

Lassen Sie uns ausführlicher über jeden von ihnen sprechen.

a) Protokollversion einstellen

Wie bereits erwähnt, verwendet die HttpClient-Klasse standardmäßig das HTTP/2-Protokoll. Sie können jedoch Ihre bevorzugte Protokollversion festlegen, entweder HTTP/1.1 oder HTTP/2.

Hier ist ein Beispiel:

1
2
HttpClient Auftraggeber = HttpClient.newBuilder()
.version(Version.HTTP_1_1)

b) Umleitungsrichtlinie festlegen

Wenn die Zielwebseite an eine andere Adresse verschoben wurde, erhalten Sie einen 3xx-HTTP-Statuscode. Da die Adresse der neuen URI normalerweise mit den Statuscodeinformationen bereitgestellt wird, kann das Festlegen der richtigen Umleitungsrichtlinie dazu führen, dass HttpClient die Anforderung automatisch an den neuen Standort weiterleitet.

Sie können es einstellen, indem Sie folgeWeiterleitungen() Methode auf der Werft Beispiel.

Hier ist ein Beispiel:

1
2
HttpClient Auftraggeber = HttpClient.newBuilder()
.followRedirects(Umleitung.NORMAL)

c) Senden Sie synchrone und asynchrone Anfragen

HttpClient unterstützt zwei Möglichkeiten zum Senden von Anforderungen:

  • Synchron mit dem send () Methode. Dadurch wird der Client blockiert, bis die Antwort empfangen wird, bevor mit der restlichen Ausführung fortgefahren wird.

Hier ist ein Beispiel:

1
2
HttpResponse Antwort = Client.Senden(Anfrage,
: BodyHandlers.ofString());

Beachten Sie, dass wir verwendet BodyHandler und rief die vonString() Methode, um die HTML-Antwort als Zeichenfolge zurückzugeben.

  • Asynchron mit dem sendAsync() Methode. Diese wartet nicht auf den Empfang der Antwort; sie ist nicht blockierend. Sobald die sendAsync() Methode aufgerufen wird, gibt sie sofort eine VervollständigbareZukunft< HttpResponse >, die abgeschlossen wird, sobald die Antwort empfangen wurde. Die zurückgegebene Abschließbare Zukunft können mithilfe verschiedener Techniken verbunden werden, um Abhängigkeiten zwischen verschiedenen asynchronen Aufgaben zu definieren.

Hier ist ein Beispiel:

1
2
Abschließbare Zukunft  > Antwort = HttpClient.newBuilder()
.sendAsync(Anfrage, HttpResponse.BodyHandler.ofString());

3. HttpResponse

Die HttpResponse stellt, wie der Name schon sagt, die Antwort dar, die nach dem Senden einer HttpRequest empfangen wird. HttpResponse bietet verschiedene hilfreiche Methoden zum Verarbeiten der empfangenen Antwort.

Dies sind die wichtigsten Methoden:

  • statusCode() Diese Methode gibt den Statuscode der Antwort zurück. Es ist von int tippe
  • Körper() Diese Methode gibt einen Textkörper für die Antwort zurück. Der Rückgabetyp richtet sich nach der Art der Antwort BodyHandler Parameter, der an den send () Methode.

Hier ist ein Beispiel:

1
2
3
4
5
6
7
8
9
//Verarbeitung des Antworttexts als String
HttpResponse Antwort = Client
.send(Anfrage, BodyHandlers.ofString());

// Antworttext wird gedruckt
System.out.println(Antwort.Body());

// Statuscode drucken
System.out.println(Antwort.Statuscode());
1
2
3
// Den Antworttext als Datei verarbeiten
HttpResponse Antwort = Client
.send(Anfrage, BodyHandlers.ofFile(Paths.get("meinbeispiel.html")));

Synchrones Beispiel

Hier ist ein Beispiel, das die synchrone Methode HttpClient verwendet, um eine Webseite zu crawlen und ihren Inhalt auszugeben:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Paket javaHttpClient;

importieren java.io.IOException;
importieren java.net.URI;
importieren java.net.URLEncoder;
importieren java.net.http.HttpClient;
importieren java.net.http.HttpRequest;
importieren java.net.http.HttpResponse;
importieren java.net.http.HttpResponse.BodyHandlers;
importieren java.nio.charset.StandardCharsets;

Öffentlichkeit Klasse SyncBeispiel {

Öffentlichkeit statisch ungültig Haupt-(String[] args) wirft IOException, InterruptedException {

// Kodierung der URL
Schnur URL = URLEncoder.encode(„https://www.forextradingbig.com/7-reasons-why-you-should-quit-forex-trading/“, StandardCharsets.UTF_8.name());

// Instanziieren von HttpClient
HttpClient Auftraggeber = HttpClient.newHttpClient();

// HttpRequest konfigurieren
HTTP-Anfrage Anforderung = HttpRequest.newBuilder()
.ERHALTEN()
.uri(URI.erstellen("https://api.crawlbase.com/?token=INSERT_TOKEN&url=" + URL))
.bauen();

//Verarbeitung der Antwort
HttpResponse Antwort = Client.senden(Anfrage, BodyHandlers.ofString());
System.out.println(Antwort.Body());
}

}

Hier ist die Ausgabe (der Kürze halber gekürzt):

Codeausgabe

Asynchrones Beispiel

Wenn Sie die asynchrone HttpClient-Methode zum Crawlen einer Webseite verwenden, sendAsync() -Methode aufgerufen wird, statt schicken().

Hier ist ein Beispiel:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Paket javaHttpClient;

importieren java.io.IOException;
importieren java.net.URI;
importieren java.net.URLEncoder;
importieren java.net.http.HttpClient;
importieren java.net.http.HttpRequest;
importieren java.net.http.HttpResponse;
importieren java.nio.charset.StandardCharsets;
importieren java.util.concurrent.CompletableFuture;
importieren java.util.concurrent.ExecutionException;
importieren java.util.concurrent.TimeUnit;
importieren java.util.concurrent.TimeoutException;

Öffentlichkeit Klasse Asynchrones Beispiel {


Öffentlichkeit statisch ungültig Haupt-(String[] args) wirft IOException, InterruptedException, ExecutionException, TimeoutException {

// Kodierung der URL
Schnur URL = URLEncoder.encode(„https://www.forextradingbig.com/7-reasons-why-you-should-quit-forex-trading/“, StandardCharsets.UTF_8.name());

// Instanziieren von HttpClient
HttpClient Auftraggeber = HttpClient.newHttpClient();

// HttpRequest konfigurieren
HTTP-Anfrage Anforderung = HttpRequest.newBuilder()
.ERHALTEN()
.version(HttpClient.Version.HTTP_2)
.uri(URI.erstellen("https://api.crawlbase.com/?token=INSERT_TOKEN&url=" + URL))
.bauen();

//Verarbeitung der Antwort
Abschließbare Zukunft > Antwort =
Client.sendAsync(Anfrage, HttpResponse.BodyHandlers.ofString());

Schnur Folge = Antwort.dannAnwenden(HttpResponse::body).get(5, Zeiteinheit.SEKUNDEN);

System.out.println (Ergebnis);

}

}

Schlussfolgerung

So erstellen Sie einen Webcrawler in Java. Die in Java 11 eingeführte HttpClient-API erleichtert das Senden und Verarbeiten von Antworten von einem Server.

Und wenn die API mit einem vielseitigen Tool wie Crawlbase kombiniert wird, können Web-Crawling-Aufgaben reibungslos und lohnend ablaufen.

Mit Crawlbase können Sie einen Scraper erstellen, der Ihnen dabei helfen kann, Informationen von Websites anonym und ohne Angst vor einer Blockierung abzurufen.

Es ist das Tool, das Sie benötigen, um Ihre Crawling-Bemühungen auf die nächste Stufe zu heben.

Klicken Sie hier, um Erstellen Sie ein kostenloses Crawlbase-Konto.

Viel Spaß beim Schaben!