Créer un robot d'exploration Web est une manière intelligente de récupérer des informations utiles disponibles en ligne. Avec un robot d'exploration Web, vous pouvez analyser Internet, parcourir des sites Web individuels et analyser et extraire leur contenu.

Le langage de programmation Java offre un moyen simple de créer un robot d'exploration Web et de collecter des données à partir de sites Web. Vous pouvez utiliser les données extraites pour divers cas d'utilisation, par exemple à des fins d'analyse, pour fournir un service utilisant des données tierces ou pour générer des données statistiques.

Dans cet article, nous vous expliquerons le processus de création d'un robot d'exploration Web à l'aide de Java et Crawlbase.

Ce dont vous aurez besoin

En règle générale, l’exploration des données Web implique la création d’un script qui envoie une requête à la page Web ciblée, accède à son code HTML sous-jacent et récupère les informations requises.

Pour atteindre cet objectif, vous aurez besoin des éléments suivants :

  • Environnement de développement Java 11
  • Crawlbase

Avant de développer la logique d'exploration, clarifions les raisons pour lesquelles nous utilisons Crawlbase est important pour l'exploration du Web.

Pourquoi utiliser Crawlbase pour ramper

Crawlbase est un puissant outil d'exploration et de récupération de données que vous pouvez utiliser pour collecter des informations à partir de sites Web rapidement et facilement.

Voici quelques raisons pour lesquelles vous devriez l’utiliser pour explorer les données en ligne :

  • Facile à utiliser Il est livré avec une API simple que vous pouvez configurer rapidement sans aucun obstacle de programmation. Avec seulement quelques lignes de code, vous pouvez commencer à utiliser l'API pour explorer des sites Web et récupérer leur contenu.

  • Prend en charge l'exploration avancée Crawlbase Permet d'effectuer des explorations web avancées et d'extraire des données de sites web complexes. Grâce à la prise en charge du rendu JavaScript, Crawlbase Vous permet d'extraire des données de sites web dynamiques. Ce navigateur headless vous permet d'extraire ce que les utilisateurs voient sur leur navigateur web, même si le site est créé avec des frameworks modernes comme Angular ou React.js.

  • Contourner les obstacles rampants Crawlbase peut gérer toutes les restrictions souvent associées à l'exploration de données en ligne. Il dispose d'un vaste réseau de proxys et de plus de 17 centres de données dans le monde. Vous pouvez l'utiliser pour contourner les restrictions d'accès, contourner les CAPTCHA et d'autres mesures anti-scraping mises en œuvre par les applications web. De plus, vous pouvez explorer des sites web en toute anonymat ; vous n'aurez pas à craindre de divulguer votre identité.

  • Compte d'essai gratuit Vous pouvez tester comment Crawlbase Fonctionne sans divulguer vos informations de paiement. Le compte gratuit vous donne droit à 1,000 XNUMX crédits pour tester les fonctionnalités de l'outil.

Comment la Crawlbase Accès

Crawlbase Fournit le Crawling API pour l'exploration et la récupération de données à partir de sites Web. Vous pouvez facilement intégrer l'API dans votre Développement Java projetez et récupérez des informations à partir de pages Web en douceur.

Chaque demande faite à la Crawling API commence par la partie de base suivante :

1
https://api.crawlbase.com

Vous devrez également ajouter les paramètres obligatoires suivants à l'API :

  • Jeton d'authentification
  • URL

Le jeton d'authentification est un jeton unique qui vous autorise à utiliser le Crawling API. Une fois que vous avez créé un compte, Crawlbase vous donnera deux types de jetons :

  • Jeton normal Ceci permet de réaliser des requêtes d'exploration génériques.
  • Jeton JavaScript Il s'agit d'un outil permettant d'explorer des sites Web dynamiques. Il vous offre des fonctionnalités de navigateur sans interface utilisateur pour explorer des pages Web rendues à l'aide de JavaScript. Comme indiqué précédemment, il s'agit d'un moyen utile d'explorer des sites Web avancés.

Voici comment ajouter le jeton d’authentification à votre requête API :

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

Le deuxième paramètre obligatoire est l'URL à explorer. Elle doit commencer par HTTP ou HTTPS et être entièrement codée. Le codage convertit la chaîne URL en un format qui peut être transféré sur Internet de manière valide et simple.

Voici comment insérer l’URL de votre requête API :

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

Si vous exécutez la ligne ci-dessus (par exemple sur votre terminal à l'aide de cURL ou en la collant dans la barre d'adresse d'un navigateur), elle exécutera la requête API et renverra l'intégralité du code source HTML de la page Web ciblée.

C'est aussi simple et facile que cela !

Si vous souhaitez effectuer une exploration avancée, vous pouvez ajouter d'autres paramètres à la demande d'API. Par exemple, lorsque vous utilisez le jeton JavaScript, vous pouvez ajouter le page_wait paramètre permettant d'indiquer au navigateur d'attendre le nombre de millisecondes spécifié avant que le code HTML résultant ne soit capturé.

Voici un exemple:

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

Construire un site Web Crawler en Java et Crawlbase

Dans ce didacticiel d'exploration Web Java, nous utiliserons le API HttpClient pour créer la logique d'exploration. L'API a été introduite dans Java 11 et est dotée de nombreuses fonctionnalités utiles pour envoyer des requêtes et récupérer leurs réponses.

API client HTTP

L'API HttpClient prend en charge HTTP/1.1 et HTTP/2. Par défaut, elle utilise le protocole HTTP/2 pour envoyer des requêtes. Si une requête est envoyée à un serveur qui ne prend pas déjà en charge HTTP/2, elle sera automatiquement rétrogradée vers HTTP/1.

De plus, ses requêtes peuvent être envoyées de manière asynchrone ou synchrone, il gère les requêtes et les corps de réponse comme flux réactifs, et utilise le modèle de générateur commun.

L'API comprend trois classes principales :

  • Demande Http
  • Client HTTP
  • Réponse HTTP

Parlons de chacun d'eux plus en détail.

1. Requête Http

Le HttpRequest, comme son nom l'indique, est un objet encapsulant la requête HTTP à envoyer. Pour créer de nouvelles instances de HttpRequest, appelez HttpRequest.newBuilder()Une fois créée, la requête est immuable et peut être envoyée plusieurs fois.

Constructeur la classe est livrée avec différentes méthodes pour configurer la demande.

Voici les méthodes les plus courantes :

  • Méthode URI
  • Méthode de demande
  • Méthode de version du protocole
  • Méthode de temporisation

Parlons de chacun d'eux plus en détail.

a) Méthode URI

La première chose à faire lors de la configuration de la requête est de définir l'URL à explorer. Nous pouvons le faire en appelant la commande uri() méthode sur le Constructeur exemple. Nous utiliserons également le URI.créer() méthode pour créer l'URI en analysant la chaîne de l'URL que nous avons l'intention d'explorer.

Voici le code:

1
2
3
4
5
6
7
Chaîne url =
URLEncoder.encode("https://www.forextradingbig.com/7-reasons-why-you-should
-quitter-le-trading-forex/", StandardCharsets.UTF_8.name());

Demande Http demandez = HttpRequest.newBuilder()
.uri(URI.créer("https://api.crawlbase.com/?token=INSERT_TOKEN&url="
+ URL))

Notez que nous avons fourni la chaîne URL en utilisant Crawlbaseles paramètres de. Il s'agit de la page Web, nous avons l'intention de récupérer son contenu.

Nous avons également codé l'URL en utilisant le Classe Java URLEncoder. Comme mentionné précédemment, Crawlbase nécessite que les URL soient codées.

b) Méthode de demande

La prochaine chose à faire est de spécifier la méthode HTTP à utiliser pour effectuer la requête. Nous pouvons appeler l'une des méthodes suivantes à partir de Constructeur:

  • OBTENIR()
  • POSTE()
  • METTRE()
  • EFFACER()

Dans ce cas, puisque nous voulons demander des données à la page Web cible, nous utiliserons le OBTENIR() méthode.

Voici le code:

1
2
Demande Http demandez = HttpRequest.newBuilder()
.OBTENIR()

Jusqu'à présent, HttpRequest contient tous les paramètres qui doivent être transmis à HttpClient. Cependant, vous devrez peut-être inclure d'autres paramètres, tels que la version du protocole HTTP et le délai d'expiration.

Voyons comment vous pouvez ajouter des paramètres supplémentaires.

c) Méthode de la version du protocole

Comme mentionné précédemment, l'API HttpClient utilise le protocole HTTP/2 par défaut. Néanmoins, vous pouvez spécifier la version du protocole HTTP que vous souhaitez utiliser.

Voici le code:

1
2
Demande Http demandez = HttpRequest.newBuilder()
.version(HttpClient.Version.HTTP_2)

d) Méthode du délai d'attente

Vous pouvez définir le délai d'attente avant de recevoir une réponse. Une fois la période définie expirée, une Exception HttpTimeout sera lancé. Par défaut, le délai d'attente est fixé à l'infini.

Vous pouvez définir le délai d'expiration en appelant la méthode timeout() sur l'instance du générateur. Vous devrez également transmettre le Durée objet pour spécifier le temps d'attente.

Voici le code:

1
2
Demande Http demandez = HttpRequest.newBuilder()
.timeout(Durée.ofSeconds(20))

2. Client Http

La classe HttpClient est le point d'entrée principal de l'API. Elle agit comme un conteneur pour les détails de configuration partagés entre plusieurs requêtes. Il s'agit du client HTTP utilisé pour envoyer des requêtes et recevoir des réponses.

Vous pouvez appeler soit le HttpClient.newBuilder() ou la HttpClient.nouveauHttpClient() méthode pour l'instancier. Une fois qu'une instance de HttpClient a été créée, elle est immuable.

La classe HttpClient propose plusieurs méthodes utiles et autodescriptives que vous pouvez utiliser lorsque vous travaillez avec des requêtes et des réponses.

Voici certaines choses que vous pouvez faire :

  • Définir la version du protocole
  • Définir la politique de redirection
  • Envoyer des requêtes synchrones et asynchrones

Parlons de chacun d'eux plus en détail.

a) Définir la version du protocole

Comme mentionné précédemment, la classe HttpClient utilise le protocole HTTP/2 par défaut. Cependant, vous pouvez définir votre version de protocole préférée, soit HTTP/1.1, soit HTTP/2.

Voici un exemple:

1
2
Client HTTP client = HttpClient.newBuilder()
.version(Version.HTTP_1_1)

b) Définir la politique de redirection

Si la page Web ciblée a été déplacée vers une adresse différente, vous obtiendrez un code d'état HTTP 3xx. Étant donné que l'adresse du nouvel URI est généralement fournie avec les informations du code d'état, la définition de la stratégie de redirection appropriée peut permettre à HttpClient de transférer automatiquement la demande vers le nouvel emplacement.

Vous pouvez le définir en utilisant le suivreRedirections() méthode sur le Constructeur exemple.

Voici un exemple:

1
2
Client HTTP client = HttpClient.newBuilder()
.followRedirects(Redirection.NORMAL)

c) Envoyer des requêtes synchrones et asynchrones

HttpClient prend en charge deux manières d’envoyer des requêtes :

  • De manière synchrone En utilisant le envoyer () méthode. Cela bloque le client jusqu'à ce que la réponse soit reçue, avant de continuer avec le reste de l'exécution.

Voici un exemple:

1
2
Réponse Http réponse = client.send(requête,
BodyHandlers.ofString());

Notez que nous avons utilisé Gestionnaires de corps et appelé le deChaîne() méthode pour renvoyer la réponse HTML sous forme de chaîne.

  • Asynchrone En utilisant le envoyerAsync() méthode. Cela n'attend pas que la réponse soit reçue ; c'est non bloquant. Une fois que la envoyerAsync() la méthode est appelée, elle renvoie instantanément un ComplétableFuture< HttpResponse >, qui se finalise une fois la réponse reçue. Le retour AchevéAvenir peuvent être joints à l'aide de diverses techniques pour définir des dépendances entre diverses tâches asynchrones.

Voici un exemple:

1
2
AchevableFuture  > réponse = HttpClient.newBuilder()
.sendAsync(requête, HttpResponse.BodyHandler.ofString());

3. Réponse HTTP

HttpResponse, comme son nom l'indique, représente la réponse reçue après l'envoi d'une HttpRequest. HttpResponse propose différentes méthodes utiles pour gérer la réponse reçue.

Voici les méthodes les plus importantes :

  • code d'état() Cette méthode renvoie le code d'état de la réponse. C'est de int type
  • Corps() Cette méthode renvoie un corps pour la réponse. Le type de retour est basé sur le type de réponse Gestionnaire de corps paramètre qui est passé à la envoyer () méthode.

Voici un exemple:

1
2
3
4
5
6
7
8
9
// Gestion du corps de la réponse comme une chaîne
Réponse Http réponse = client
.send(requête, BodyHandlers.ofString());

// Impression du corps de la réponse
Système.out.println(response.body());

// Code d'état d'impression
System.out.println(réponse.statusCode());
1
2
3
// Gestion du corps de la réponse comme un fichier
Réponse Http réponse = client
.send(requête, BodyHandlers.ofFile(Paths.get("monexemple.html")));

Exemple synchrone

Voici un exemple qui utilise la méthode synchrone HttpClient pour explorer une page Web et afficher son contenu :

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
paquet javaHttpClient;

importer java.io.IOException ;
importer java.net.URI;
importer java.net.URLEncoder;
importer java.net.http.HttpClient;
importer java.net.http.HttpRequest;
importer java.net.http.HttpResponse;
importer java.net.http.HttpResponse.BodyHandlers;
importer java.nio.charset.Jeux de caractères standard ;

public classe Exemple de synchronisation {

public statique annuler principal(Chaîne[] arguments) jette Exception d'E/S, Exception interrompue {

// Encodage de l'URL
Chaîne url = URLEncoder.encode("https://www.forextradingbig.com/7-reasons-why-you-should-quit-forex-trading/", StandardCharsets.UTF_8.name());

// Instanciation de HttpClient
Client HTTP client = HttpClient.nouveauHttpClient();

// Configuration de HttpRequest
Demande Http demandez = HttpRequest.newBuilder()
.OBTENIR()
.uri(URI.créer("https://api.crawlbase.com/?token=INSERT_TOKEN&url=" + URL))
.construire();

// Gestion de la réponse
Réponse Http réponse = client.send(requête, BodyHandlers.ofString());
Système.out.println(response.body());
}

}

Voici le résultat (pour plus de concision, il est tronqué) :

Sortie de code

Exemple asynchrone

Lors de l'utilisation de la méthode asynchrone HttpClient pour explorer une page Web, le envoyerAsync() la méthode est appelée, au lieu de envoyer().

Voici un exemple:

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
paquet javaHttpClient;

importer java.io.IOException ;
importer java.net.URI;
importer java.net.URLEncoder;
importer java.net.http.HttpClient;
importer java.net.http.HttpRequest;
importer java.net.http.HttpResponse;
importer java.nio.charset.Jeux de caractères standard ;
importer java.util.concurrent.CompletableFuture;
importer java.util.concurrent.ExecutionException;
importer java.util.concurrent.TimeUnit ;
importer java.util.concurrent.TimeoutException;

public classe Exemple asynchrone {


public statique annuler principal(Chaîne[] arguments) jette Exception d'E/S, Exception interrompue, Exception d'exécution, Exception de dépassement de délai {

// Encodage de l'URL
Chaîne url = URLEncoder.encode("https://www.forextradingbig.com/7-reasons-why-you-should-quit-forex-trading/", StandardCharsets.UTF_8.name());

// Instanciation de HttpClient
Client HTTP client = HttpClient.nouveauHttpClient();

// Configuration de HttpRequest
Demande Http demandez = HttpRequest.newBuilder()
.OBTENIR()
.version(HttpClient.Version.HTTP_2)
.uri(URI.créer("https://api.crawlbase.com/?token=INSERT_TOKEN&url=" + URL))
.construire();

// Gestion de la réponse
AchevableFuture > réponse =
client.sendAsync(requête, HttpResponse.BodyHandlers.ofString());

Chaîne résultat = réponse.thenApply(HttpResponse::body).get(5, TimeUnit.SECONDS);

System.out.println(résultat);

}

}

Conclusion

Voilà comment créer un robot d'exploration Web en Java. L'API HttpClient, introduite dans Java 11, facilite l'envoi et la gestion des réponses à partir d'un serveur.

Et si l'API est combinée avec un outil polyvalent comme Crawlbase, cela peut rendre les tâches d'exploration Web fluides et enrichissantes.

et Crawlbase, vous pouvez créer un scraper qui peut vous aider à récupérer des informations à partir de sites Web de manière anonyme et sans craindre d'être bloqué.

C'est l'outil dont vous avez besoin pour faire passer vos efforts d'exploration au niveau supérieur.

Cliquez ici pour créer un gratuit Crawlbase compte.

Bon grattage !