logo

Implémentation du Web Scraping en Python avec BeautifulSoup

Il existe principalement deux manières d’extraire des données d’un site Web :

  • Utilisez l'API du site (si elle existe). Par exemple, Facebook dispose de l'API Facebook Graph qui permet de récupérer les données publiées sur Facebook.
  • Accédez au HTML de la page Web et extrayez-en des informations/données utiles. Cette technique est appelée web scraping ou web Harvesting ou extraction de données Web.

Cet article traite des étapes impliquées dans le web scraping à l'aide de la mise en œuvre d'un framework Web Scraping de Python appelé Beautiful Soup. Étapes impliquées dans le web scraping :



  1. Envoyez une requête HTTP à l'URL de la page Web à laquelle vous souhaitez accéder. Le serveur répond à la demande en renvoyant le contenu HTML de la page Web. Pour cette tâche, nous utiliserons une bibliothèque HTTP tierce pour les requêtes python.
  2. Une fois que nous avons accédé au contenu HTML, il nous reste la tâche d'analyser les données. Étant donné que la plupart des données HTML sont imbriquées, nous ne pouvons pas extraire les données simplement via le traitement des chaînes. Il faut un analyseur capable de créer une structure imbriquée/arborescente des données HTML. Il existe de nombreuses bibliothèques d'analyseurs HTML disponibles, mais la plus avancée est html5lib.
  3. Maintenant, tout ce que nous avons à faire est de naviguer et de rechercher dans l'arbre d'analyse que nous avons créé, c'est-à-dire la traversée d'arbre. Pour cette tâche, nous utiliserons une autre bibliothèque Python tierce, Belle soupe . Il s'agit d'une bibliothèque Python permettant d'extraire des données de fichiers HTML et XML.

Étape 1 : Installation des bibliothèques tierces requises

  • Le moyen le plus simple d'installer des bibliothèques externes en python est d'utiliser pip. pépin est un système de gestion de packages utilisé pour installer et gérer des packages logiciels écrits en Python. Tout ce que vous avez à faire est de :
pip install requests pip install html5lib pip install bs4>

Étape 2 : Accéder au contenu HTML à partir de la page Web

Python




qu'est-ce qu'une pile Java





import> requests> URL>=> 'https:>/>/>www.techcodeview.com>/>data>->structures>/>'> r>=> requests.get(URL)> print>(r.content)>

>

tutoriel javafx

>

Essayons de comprendre ce morceau de code.

  • Tout d’abord, importez la bibliothèque de requêtes.
  • Ensuite, spécifiez l'URL de la page Web que vous souhaitez supprimer.
  • Envoyez une requête HTTP à l'URL spécifiée et enregistrez la réponse du serveur dans un objet de réponse appelé r.
  • Maintenant, comme print r.content pour obtenir le contenu HTML brut de la page Web. Il est de type « chaîne ».

Remarque : Parfois, vous pouvez obtenir une erreur Non accepté, alors essayez d'ajouter un agent utilisateur de navigateur comme ci-dessous. Trouvez votre agent utilisateur en fonction de l'appareil et du navigateur à partir d'ici https://deviceatlas.com/blog/list-of-user-agent-strings

Python3




headers>=> {>'User-Agent'>:>'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246'>}> # Here the user agent is for Edge browser on windows 10. You can find your browser user agent from the above given link.> r>=> requests.get(url>=>URL, headers>=>headers)> print>(r.content)>

initialiseur de dictionnaire c#
>

>

Étape 3 : Analyser le contenu HTML

Python




#This will not run on online IDE> import> requests> from> bs4>import> BeautifulSoup> > URL>=> 'http:>/>/>www.values.com>/>inspirational>->quotes'> r>=> requests.get(URL)> > soup>=> BeautifulSoup(r.content,>'html5lib'>)># If this line causes an error, run 'pip install html5lib' or install html5lib> print>(soup.prettify())>

>

>

Une chose vraiment intéressante à propos de la bibliothèque BeautifulSoup est qu'elle est construite au-dessus des bibliothèques d'analyse HTML telles que html5lib, lxml, html.parser, etc. Ainsi, l'objet BeautifulSoup et la spécification de la bibliothèque d'analyse peuvent être créés en même temps. Dans l'exemple ci-dessus,

soup = BeautifulSoup(r.content, 'html5lib')>

Nous créons un objet BeautifulSoup en passant deux arguments :

    r.content : C'est le contenu HTML brut. html5lib : Spécifier l'analyseur HTML que nous souhaitons utiliser.

Maintenant soupe.prettify() est imprimé, il donne la représentation visuelle de l'arbre d'analyse créé à partir du contenu HTML brut. Étape 4 : Recherche et navigation dans l'arborescence d'analyse Maintenant, nous aimerions extraire quelques données utiles du contenu HTML. L'objet soupe contient toutes les données de la structure imbriquée qui pourraient être extraites par programme. Dans notre exemple, nous récupérons une page Web composée de quelques citations. Nous aimerions donc créer un programme pour sauvegarder ces devis (et toutes les informations pertinentes les concernant).

combien y a-t-il de villes aux États-Unis d'Amérique

Python




#Python program to scrape website> #and save quotes from website> import> requests> from> bs4>import> BeautifulSoup> import> csv> > URL>=> 'http:>/>/>www.values.com>/>inspirational>->quotes'> r>=> requests.get(URL)> > soup>=> BeautifulSoup(r.content,>'html5lib'>)> > quotes>=>[]># a list to store quotes> > table>=> soup.find(>'div'>, attrs>=> {>'id'>:>'all_quotes'>})> > for> row>in> table.findAll(>'div'>,> >attrs>=> {>'class'>:>'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'>}):> >quote>=> {}> >quote[>'theme'>]>=> row.h5.text> >quote[>'url'>]>=> row.a[>'href'>]> >quote[>'img'>]>=> row.img[>'src'>]> >quote[>'lines'>]>=> row.img[>'alt'>].split('>#')[0]> >quote[>'author'>]>=> row.img[>'alt'>].split('>#')[1]> >quotes.append(quote)> > filename>=> 'inspirational_quotes.csv'> with>open>(filename,>'w'>, newline>=>'') as f:> >w>=> csv.DictWriter(f,[>'theme'>,>'url'>,>'img'>,>'lines'>,>'author'>])> >w.writeheader()> >for> quote>in> quotes:> >w.writerow(quote)>

>

>

Avant de continuer, nous vous recommandons de parcourir le contenu HTML de la page Web que nous avons imprimée à l'aide de la méthode soup.prettify() et d'essayer de trouver un modèle ou un moyen de naviguer vers les citations.

  • On remarque que toutes les citations se trouvent dans un conteneur div dont l'identifiant est « all_quotes ». Ainsi, nous trouvons cet élément div (appelé table dans le code ci-dessus) en utilisant trouver() méthode :
table = soup.find('div', attrs = {'id':'all_quotes'})>
  • Le premier argument est la balise HTML que vous souhaitez rechercher et le deuxième argument est un élément de type dictionnaire permettant de spécifier les attributs supplémentaires associés à cette balise. trouver() La méthode renvoie le premier élément correspondant. Tu peux essayer d'imprimer table.prettify() pour avoir une idée de ce que fait ce morceau de code.
  • Maintenant, dans l'élément table, on peut remarquer que chaque citation se trouve à l'intérieur d'un conteneur div dont la classe est quote. Nous parcourons donc chaque conteneur div dont la classe est quote. Ici, nous utilisons la méthode findAll() qui est similaire à la méthode find en termes d’arguments mais elle renvoie une liste de tous les éléments correspondants. Chaque citation est désormais itérée à l'aide d'une variable appelée rangée. Voici un exemple de contenu HTML de ligne pour une meilleure compréhension : Considérons maintenant ce morceau de code :
for row in table.find_all_next('div', attrs = {'class': 'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): quote = {} quote['theme'] = row.h5.text quote['url'] = row.a['href'] quote['img'] = row.img['src'] quote['lines'] = row.img['alt'].split(' #')[0] quote['author'] = row.img['alt'].split(' #')[1] quotes.append(quote)>
  • Nous créons un dictionnaire pour enregistrer toutes les informations sur un devis. La structure imbriquée est accessible en utilisant la notation par points. Pour accéder au texte à l'intérieur d'un élément HTML, nous utilisons .texte :
quote['theme'] = row.h5.text>
  • Nous pouvons ajouter, supprimer, modifier et accéder aux attributs d’une balise. Cela se fait en traitant la balise comme un dictionnaire :
quote['url'] = row.a['href']>
  • Enfin, toutes les citations sont annexées à la liste appelée citations.
  • Enfin, nous aimerions sauvegarder toutes nos données dans un fichier CSV.
filename = 'inspirational_quotes.csv' with open(filename, 'w', newline='') as f: w = csv.DictWriter(f,['theme','url','img','lines','author']) w.writeheader() for quote in quotes: w.writerow(quote)>
  • Ici, nous créons un fichier CSV appelé inspirational_quotes.csv et y enregistrons toutes les citations pour toute utilisation ultérieure.

C'était donc un exemple simple de la façon de créer un grattoir Web en Python. À partir de là, vous pouvez essayer de supprimer tout autre site Web de votre choix. En cas de questions, postez-les ci-dessous dans la section commentaires.

parcours dans l'ordre de l'arbre binaire

Note : Le Web Scraping est considéré comme illégal dans de nombreux cas. Cela peut également entraîner le blocage permanent de votre adresse IP par un site Web. Ce blog est contribué par Nikhil Kumar .