Grattez un site Web avec ce magnifique didacticiel Soup Python

Grattez un site Web avec ce magnifique didacticiel Soup Python

Beautiful Soup est une bibliothèque Python open source. Il utilise des analyseurs de navigation pour gratter le contenu des fichiers XML et HTML. Vous avez besoin de données à plusieurs fins d'analyse. Cependant, si vous débutez avec Python et le grattage Web, la bibliothèque Beautiful Soup de Python vaut la peine d'être essayée pour un projet de grattage Web.





Avec la bibliothèque open source Beautiful Soup de Python, vous pouvez obtenir des données en grattant n'importe quelle partie ou élément d'une page Web avec un contrôle maximal sur le processus. Dans cet article, nous examinons comment vous pouvez utiliser Beautiful Soup pour gratter un site Web.





Comment installer une belle soupe et commencer avec elle

Avant de continuer, dans cet article du didacticiel Beautiful Soup, nous utiliserons Python 3 et bellesoupe4 , la dernière version de Beautiful Soup. Assurez-vous que vous créer un environnement virtuel Python pour isoler votre projet et ses packages de ceux de votre machine locale.





comment supprimer les meilleurs amis de snapchat

Pour commencer, vous devez installer la bibliothèque Beautiful Soup dans votre environnement virtuel. Beautiful Soup est disponible sous forme de package PyPi pour tous les systèmes d'exploitation, vous pouvez donc l'installer avec le pip installer beautifulsoup4 commande via le terminal.

Cependant, si vous êtes sur Debian ou Linux, la commande ci-dessus fonctionne toujours, mais vous pouvez l'installer avec le gestionnaire de paquets en exécutant apt-get installer python3-bs4 .



Beautiful Soup ne récupère pas directement les URL. Il ne fonctionne qu'avec des fichiers HTML ou XML prêts à l'emploi. Cela signifie que vous ne pouvez pas y passer une URL directement. Pour résoudre ce problème, vous devez obtenir l'URL du site Web cible avec la bibliothèque de requêtes de Python avant de la transmettre à Beautiful Soup.

Pour rendre cette bibliothèque disponible pour votre grattoir, exécutez la commande demandes d'installation de pip commande via le terminal.





Pour utiliser la bibliothèque d'analyseur XML, exécutez pip installer lxml pour l'installer.

Inspectez la page Web que vous souhaitez gratter

Avant de gratter un site Web avec lequel vous n'êtes pas familier, une bonne pratique consiste à inspecter ses éléments. Vous pouvez le faire en basculant votre navigateur en mode développeur. C'est assez facile de utiliser Chrome DevTools si vous utilisez Google Chrome.





Cependant, il est nécessaire d'inspecter une page Web pour en savoir plus sur ses balises HTML, ses attributs, ses classes et ses identifiants. Cela expose les éléments de base d'une page Web et ses types de contenu.

Il vous aide également à développer les meilleures stratégies que vous pouvez utiliser pour obtenir les données exactes que vous voulez d'un site Web et comment vous pouvez les obtenir.

Comment gratter les données d'un site Web avec une belle soupe

Maintenant que tout est prêt, ouvrez un éditeur de code préféré et créez un nouveau fichier Python en lui donnant le nom de votre choix. Cependant, vous pouvez également utiliser des IDE basés sur le Web comme Jupyter Notebook si vous n'êtes pas habitué à exécuter Python via la ligne de commande.

Ensuite, importez les bibliothèques nécessaires :

from bs4 import BeautifulSoup
import requests

Tout d'abord, voyons comment fonctionne la bibliothèque de requêtes :

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com')
print(website)

Lorsque vous exécutez le code ci-dessus, il renvoie un état 200, indiquant que votre demande a abouti. Sinon, vous obtenez un état 400 ou d'autres états d'erreur qui indiquent l'échec d'une requête GET.

N'oubliez pas de toujours remplacer l'URL du site Web entre parenthèses par votre URL cible.

Une fois que vous obtenez le site Web avec le avoir demande, vous la transmettez ensuite à Beautiful Soup, qui peut désormais lire le contenu sous forme de fichiers HTML ou XML à l'aide de son analyseur XML ou HTML intégré, selon le format choisi.

Jetez un œil à cet extrait de code suivant pour voir comment procéder avec l'analyseur HTML :

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup)

Le code ci-dessus renvoie l'intégralité du DOM d'une page Web avec son contenu.

Vous pouvez également obtenir une version plus alignée du DOM en utilisant le enjoliver méthode. Vous pouvez essayer ceci pour voir sa sortie:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.prettify())

Vous pouvez également obtenir le contenu pur d'une page Web sans charger son élément avec le .texte méthode:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.text)

Comment gratter le contenu d'une page Web par le nom de la balise

Vous pouvez également gratter le contenu d'une balise particulière avec Beautiful Soup. Pour ce faire, vous devez inclure le nom de la balise cible dans votre demande de grattoir Beautiful Soup.

Par exemple, voyons comment vous pouvez obtenir le contenu dans le h2 balises d'une page Web.

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.h2)

Dans l'extrait de code ci-dessus, soupe.h2 renvoie le premier h2 élément de la page Web et ignore le reste. Pour charger tous les h2 éléments, vous pouvez utiliser le Trouver tout fonction intégrée et la pour boucle de Python :

la commande amazon n'est jamais arrivée mais dit livrée
from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print(soups)

Ce bloc de code renvoie tout h2 éléments et leur contenu. Cependant, vous pouvez obtenir le contenu sans charger la balise en utilisant le .chaîne de caractères méthode:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print(soups.string)

Vous pouvez utiliser cette méthode pour n'importe quelle balise HTML. Tout ce que vous avez à faire est de remplacer le h2 tag avec celui que vous aimez.

Cependant, vous pouvez également gratter plus de balises en passant une liste de balises dans le Trouver tout méthode. Par exemple, le bloc de code ci-dessous gratte le contenu de à , h2 , et Titre Mots clés:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
tags = soup.find_all(['a', 'h2', 'title'])
for soups in tags:
print(soups.string)

Comment gratter une page Web à l'aide de l'ID et du nom de classe

Après avoir inspecté un site Web avec les DevTools, il vous permet d'en savoir plus sur les attributs id et class contenant chaque élément dans son DOM. Une fois que vous avez cette information, vous pouvez gratter cette page Web en utilisant cette méthode. C'est utile lorsque le contenu d'un composant cible sort de la base de données.

Vous pouvez utiliser le trouve méthode pour les grattoirs id et class. Contrairement au Trouver tout méthode qui renvoie un objet itérable, la trouve La méthode fonctionne sur une seule cible non itérable, qui est la identifiant dans ce cas. Ainsi, vous n'avez pas besoin d'utiliser le pour boucle avec elle.

Regardons un exemple de la façon dont vous pouvez gratter le contenu d'une page ci-dessous à l'aide de l'identifiant :

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
id = soup.find(id = 'enter the target id here')
print(id.text)

Pour ce faire pour un nom de classe, remplacez le identifiant avec classer . Cependant, l'écriture classer entraîne directement une confusion de syntaxe car Python le considère comme un mot-clé. Pour contourner cette erreur, vous devez écrire un trait de soulignement devant la classe comme ceci : classer_ .

En substance, la ligne contenant l'identifiant devient :

my_classes = soup.find(class_ = 'enter the target class name here')
print(my_classes.text)

Cependant, vous pouvez également gratter une page Web en appelant un nom de balise particulier avec son identifiant ou sa classe correspondant :

data = soup.find_all('div', class_ = 'enter the target class name here')
print(data)

Comment faire un grattoir réutilisable avec une belle soupe

Vous pouvez créer une classe et rassembler tout le code précédent dans une fonction de cette classe pour créer un grattoir réutilisable qui récupère le contenu de certaines balises et leurs identifiants. Nous pouvons le faire en créant une fonction qui accepte cinq arguments : une URL, deux noms de balises et leurs identifiants ou classes correspondants.

Supposons que vous vouliez gratter le prix des chemises sur un site de commerce électronique. L'exemple de classe de grattoir ci-dessous extrait les balises price et shirt avec leurs identifiants ou classes correspondants, puis les renvoie sous forme de cadre de données Pandas avec 'Price' et Shirt_name comme noms de colonnes.

Assurez-vous que vous pip installer des pandas via le terminal si vous ne l'avez pas déjà fait.

import pandas as pd
class scrapeit:
try:
def scrape(website=None, tag1=None, id1=None, tag2=None, id2=None):
if not (website and tag1 and id1 and tag2 and id2)==None:
try:
page = requests.get(website)
soup = BeautifulSoup(page.content, 'html.parser')
infotag1 = soup.find_all(tag1, id1)
infotag2 = soup.find_all(tag2, id2)
priced = [prices.text for prices in infotag1]
shirt = [shirts.text for shirts in infotag2]
data = {
'Price':priced,
'Shirt_name':shirt}
info = pd.DataFrame(data, columns=['Price', 'Shirt_name'])
print(info)
except:
print('Not successful')
else:
print('Oops! Please enter a website, two tags and thier corresponding ids')
except:
print('Not successful!')

Le grattoir que vous venez de créer est un module réutilisable et vous pouvez l'importer et l'utiliser dans un autre fichier Python. Pour appeler le rayer fonction de sa classe, vous utilisez scrapeit.scrape('URL du site Web', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id') . Si vous ne fournissez pas l'URL et d'autres paramètres, le autre l'instruction vous y invite.

Pour utiliser ce scaper dans un autre fichier Python, vous pouvez l'importer comme ceci :

from scraper_module import scrapeit
scrapeit.scrape('URL', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id')

Noter: grattoir_module est le nom du fichier Python contenant la classe scraper.

Vous pouvez également vérifier le Belle documentation sur la soupe si vous voulez approfondir la façon dont vous pouvez en tirer le meilleur parti.

Beautiful Soup est un outil de grattage Web précieux

Beautiful Soup est un puissant grattoir d'écran Python qui vous permet de contrôler la façon dont vos données sont transmises pendant le grattage. C'est un outil commercial précieux, car il peut vous donner accès aux données Web de vos concurrents, telles que les prix, les tendances du marché, etc.

disque dur fonctionnant à 100% Windows 10

Bien que nous ayons créé un grattoir de balises dans cet article, vous pouvez toujours jouer avec cette puissante bibliothèque Python pour créer des outils de grattage plus utiles.

Partager Partager Tweeter E-mail Les meilleurs outils de grattage Web en ligne

Besoin de collecter des données à partir de sites Web à des fins d'analyse ? Ces outils de grattage Web vous facilitent la tâche.

Lire la suite
Rubriques connexes
  • La programmation
  • Python
A propos de l'auteur Idisou Omisola(94 articles publiés)

Idowu est passionné par tout ce qui concerne les technologies intelligentes et la productivité. Pendant son temps libre, il s'amuse avec le codage et passe à l'échiquier quand il s'ennuie, mais il aime aussi de temps en temps rompre avec la routine. Sa passion pour montrer aux gens la voie à suivre avec la technologie moderne le motive à écrire davantage.

Plus de Idowu Omisola

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