Le scraping Web, également connu sous le nom d'extraction de données Web, est une méthode automatisée d'extraction de données ou de contenu à partir de pages Web.
Les grattoirs Web automatisent l'extraction de données sans interférence humaine. Un scraper accède à une page Web en envoyant des requêtes HTTP, un peu comme le fait un navigateur Web. Cependant, au lieu d'afficher le code HTML qu'il récupère, il le traite selon vos instructions et stocke le résultat.
Les grattoirs Web sont pratiques pour récupérer des données à partir de sites Web qui ne fournissent pas d'API. Ils sont populaires dans des domaines tels que la science des données, la cybersécurité, le développement frontend et backend.
Web Scraping en Go
Dans Go, il existe différents packages de grattage Web. Les plus populaires incluent goquery, Colly et ChromeDP.
ChromeDP est un package de pilotes Web de type sélénium. Il prend en charge le protocole des outils de développement Chrome dans Go sans dépendances.
Colly est une bibliothèque spécifique au web scraping construite à l'aide de goquery. Mais goquery est l'option la plus rapide pour gratter des sites Web dans Go.
Qu'est-ce que la goquerie ?
La bibliothèque CSS, jQuery, a contribué à inspirer goquerie. C'est une bibliothèque Go basée sur le net/html package, qui implémente un tokenizer et un analyseur compatible HTML5. Il utilise également le package Cascadia, qui implémente des sélecteurs CSS à utiliser avec l'analyseur fourni par net/html.
Installer goquery
Exécutez la commande ci-dessous dans votre terminal pour installer goquery. Si vous rencontrez des erreurs, essayez de mettre à jour votre version de Go.
aller obtenir github.com/PuerkitoBio/goquery
Le processus de grattage Web
Vous pouvez diviser le processus de scraping global en trois tâches plus petites :
- Faire des requêtes HTTP.
- Utilisation des sélecteurs et des localisateurs pour obtenir les données requises.
- Sauvegarde des données dans une base de données ou des structures de données pour un traitement ultérieur.
Faire des requêtes HTTP dans Go
Vous pouvez envoyer des requêtes HTTP en utilisant le réseau/http package inclus dans la bibliothèque standard Go.
emballer principale
importer "net/http"
importer "Journal"
importer "fmt"fonctionprincipale() {
Urlweb := "https://news.ycombinator.com/"
réponse, erreur:= http. Obtenir (urlweb)
si erreur != néant {
Journal. Fataln (erreur)
} autresi réponse. Code d'état == 200 {
fmt. Println("On peut gratter ça")
} autre {
Journal. Fatalln("Ne grattez pas ça")
}
}
http. Avoir renvoie un corps de réponse et une erreur. réponse. Code d'état est le code d'état de la demande-réponse.
En faisant des requêtes HTTP, si le code d'état de la réponse est 200 vous pouvez continuer à gratter le site Web.
Obtenir les données requises à l'aide de goquery
Obtenir le HTML du site Web
Tout d'abord, vous devez analyser le code HTML brut de la réponse (réponse.corps) pour obtenir un objet document complet représentant la page Web :
document, err := goquery. NouveauDocumentDuLecteur (réponse. Corps)
si erreur != néant {
Journal. Fataln (erreur)
}
Vous pouvez maintenant utiliser l'objet document pour accéder à la structure et au contenu de la page Web.
Sélection des éléments requis à partir du HTML
Vous devrez inspecter la page Web pour vérifier la structure des données que vous devez extraire. Cela vous aidera à construire un sélecteur pour y accéder.
À l'aide de sélecteurs et de localisateurs, vous pouvez extraire le code HTML dont vous avez besoin à l'aide de la Trouver méthode de l'objet document.
Le Trouver prend un sélecteur CSS pour localiser l'élément qui contient les données dont vous avez besoin :
document. Trouver("tr.chose")
Le code ci-dessus ne renvoie que le premier élément HTML correspondant au sélecteur, ou une liste vide s'il n'y avait aucune correspondance.
Sélection de plusieurs éléments à partir de HTML
La plupart du temps, vous voudrez récupérer tous les éléments HTML qui correspondent à votre sélecteur.
Vous pouvez sélectionner tous les éléments correspondants dans le HTML à l'aide de la Chaque méthode de la valeur que Trouver() Retour. Le Chaque prend en compte une fonction à deux paramètres: un index et un sélecteur de type *goquerie. Sélection.
document. Find("tr.athing").Each(fonction(indice entier, sélecteur *goquery. Sélection) {
/* Sélecteur de processus ici */
})
Dans le corps de la fonction, vous pouvez sélectionner les données spécifiques souhaitées dans le code HTML. Dans ce cas, vous avez besoin des liens et des titres de chaque article de la liste des pages. Utilisez le Trouver méthode du paramètre selector pour affiner l'ensemble d'éléments et extraire du texte ou des valeurs d'attribut.
document. Find("tr.athing").Each(fonction(indice entier, sélecteur *goquery. Sélection) {
titre := sélecteur. Find("td.title").Text()
lien, trouvé := sélecteur. Find("a.titlelink").Attr("href")
})
Le code ci-dessus appelle le Texte méthode du résultat de sélecteur. Trouver pour extraire le contenu d'une cellule du tableau. La sélection d'attributs, tels que les URL de lien et d'image, nécessite que vous utilisiez le Attr méthode. Cette méthode renvoie également une valeur indiquant si l'attribut existe.
Le processus est le même pour sélectionner les éléments et les attributs d'une page Web.
Le Trouver est très puissante, permettant un large éventail d'opérations pour sélectionner et localiser des éléments HTML. Vous pouvez les explorer dans la documentation de goquery.
Enregistrement des données récupérées
L'attribut de lien et le titre sont des chaînes que vous pouvez affecter à des variables. Dans des scénarios réels, vous enregistrerez dans une base de données ou une structure de données à des fins de manipulation. Souvent, une simple structure personnalisée suffira.
Créer une structure avec des champs titre et lien et une tranche de structures pour contenir le type de structure.
taper Information structure {
lien corde
Titre corde
}
infos := Fabriquer([]Information, 0)
Une fois que vous avez créé la structure et la tranche, dans le corps de la fonction de méthode de document, remplissez la tranche dans la fonction que vous transmettez à la méthode Find. Utilisez le type struct pour instancier de nouvelles structures de données, chacune contenant un résultat.
infos = ajouter(infos, informations{
titre: titre,
lien: lien,
})
Cela ajoute des types de Information(la structure) au Info(la tranche) à partir de laquelle vous pouvez manipuler les données à votre guise.
L'impression de la tranche montre que vous avez réussi à gratter le site Web et à remplir la tranche.
fmt. Imprimerln (info)
Il est raisonnable de sauvegarder les données extraites dans un cache local afin de ne pas accéder au serveur de la page Web plus que nécessaire. Cela réduira non seulement le trafic, mais accélérera votre application car il est plus rapide de récupérer des données locales que de faire des requêtes et de gratter des sites Web.
Il existe de nombreux packages de base de données dans Go que vous pouvez utiliser pour enregistrer les données. Le base de données/sql package prend en charge les bases de données SQL. Il existe également des clients de base de données NoSQL comme le Pilote MongoDB Go, et des bases de données sans serveur comme FaunaDB utilisant le Pilote FaunaDB.
L'essence du Web Scraping en Go
Si vous essayez d'extraire des données d'un site Web, goquery est un excellent point de départ. Mais c'est un package puissant qui peut faire plus que simplement gratter le Web. Vous pouvez en savoir plus sur ses fonctionnalités dans la documentation officielle du projet.
Le scraping Web est une compétence importante dans divers domaines technologiques et il vous sera utile lors de bon nombre de vos projets.
Comment implémenter les concepts de programmation orientée objet dans Go
Lire la suite
Rubriques connexes
- Programmation
- Développement web
- Programmation
A propos de l'auteur
Goodness est rédacteur technique, développeur backend et analyste de données, simplifiant divers sujets technologiques tout en explorant ce domaine fascinant.
Abonnez-vous à notre newsletter
Rejoignez notre newsletter pour des conseils techniques, des critiques, des ebooks gratuits et des offres exclusives !
Cliquez ici pour vous abonner