Présentation
Dans ce didacticiel, nous allons explorer de nombreux exemples d'utilisation de BeautifulSoup bibliothèque en Python. Pour une meilleure compréhension, suivons quelques directives/étapes qui nous aideront à simplifier les choses et à produire un code efficace. Veuillez consulter le cadre/les étapes que nous allons suivre dans tous les exemples mentionnés ci-dessous :
- Inspecter le HTML et CSS code derrière le site Web/la page Web.
- Importez les bibliothèques nécessaires.
- Créer un agent utilisateur (Facultatif).
- Envoyer
get()
demander et récupérer le contenu de la page Web. - Vérifiez le code d'état après avoir reçu la réponse.
- Créez un Beautiful Soup Object et définissez l'analyseur.
- Mettez en œuvre votre logique.
❖ Avis de non-responsabilité : Cet article considère que vous avez parcouru les concepts de base du web scraping. Le seul but de cet article est de répertorier et de démontrer des exemples de scraping Web. Les exemples mentionnés ont été créés uniquement à des fins éducatives. Si vous souhaitez apprendre les concepts de base avant de plonger dans les exemples, veuillez suivre le didacticiel sur ce lien.
Sans plus tarder, plongeons-nous dans les exemples. Que les jeux commencent !
Exemple 1 :Scraper un exemple de page Web
Commençons par un exemple simple où nous allons extraire des données d'une table donnée dans une page Web. La page Web à partir de laquelle nous allons extraire les données a été mentionnée ci-dessous :
Le code pour extraire les données du tableau de la page Web ci-dessus a été donné ci-dessous.
# 1. Import the necessary LIBRARIES import requests from bs4 import BeautifulSoup # 2. Create a User Agent (Optional) headers = {"User-Agent": "Mozilla/5.0 (Linux; U; Android 4.2.2; he-il; NEO-X5-116A Build/JDQ39) AppleWebKit/534.30 (" "KHTML, like Gecko) Version/4.0 Safari/534.30"} # 3. Send get() Request and fetch the webpage contents response = requests.get("https://shubhamsayon.github.io/python/demo_html.html", headers=headers) webpage = response.content # 4. Check Status Code (Optional) # print(response.status_code) # 5. Create a Beautiful Soup Object soup = BeautifulSoup(webpage, "html.parser") # 6. Implement the Logic. for tr in soup.find_all('tr'): topic = "TOPIC: " url = "URL: " values = [data for data in tr.find_all('td')] for value in values: print(topic, value.text) topic = url print()
Sortie :
TOPIC: __str__ vs __repr__ In Python URL: https://blog.finxter.com/python-__str__-vs-__repr__/ TOPIC: How to Read a File Line-By-Line and Store Into a List? URL: https://blog.finxter.com/how-to-read-a-file-line-by-line-and-store-into-a-list/ TOPIC: How To Convert a String To a List In Python? URL: https://blog.finxter.com/how-to-convert-a-string-to-a-list-in-python/ TOPIC: How To Iterate Through Two Lists In Parallel? URL: https://blog.finxter.com/how-to-iterate-through-two-lists-in-parallel/ TOPIC: Python Scoping Rules – A Simple Illustrated Guide URL: https://blog.finxter.com/python-scoping-rules-a-simple-illustrated-guide/ TOPIC: Flatten A List Of Lists In Python URL: https://blog.finxter.com/flatten-a-list-of-lists-in-python/
✨ Vidéo Procédure pas à pas du code ci-dessus :
Exemple 2 :Extraction de données du classement Finxter
Cet exemple montre comment nous pouvons facilement récupérer les données du tableau de bord Finxter qui répertorie les elos/points. L'image ci-dessous représente les données que nous allons extraire de https://app.finxter.com.
Le code pour extraire les données du tableau de la page Web ci-dessus a été donné ci-dessous.
# import the required libraries import requests from bs4 import BeautifulSoup # create User-Agent (optional) headers = {"User-Agent": "Mozilla/5.0 (CrKey armv7l 1.5.16041) AppleWebKit/537.36 (KHTML, like Gecko) " "Chrome/31.0.1650.0 Safari/537.36"} # get() Request response = requests.get("https://app.finxter.com/learn/computer/science/", headers=headers) # Store the webpage contents webpage = response.content # Check Status Code (Optional) print(response.status_code) # Create a BeautifulSoup object out of the webpage content soup = BeautifulSoup(webpage, "html.parser") # The logic for table in soup.find_all('table',class_='w3-table-all',limit=1): for tr in table.find_all('tr'): name = "USERNAME: " elo = "ELO: " rank = "RANK: " for td in tr.find_all('td'): print(name,td.text.strip()) name = elo elo = rank print()
Sortie : Veuillez télécharger le fichier ci-dessous pour afficher les données extraites à la suite de l'exécution du code ci-dessus.
Cliquez pour télécharger et afficher la sortie✨ Vidéo pas à pas du code ci-dessus :
Exemple 3 :Gratter le site d'emploi Python gratuit
Le grattage des données peut s'avérer extrêmement pratique tout en automatisant les recherches sur les sites Web d'emploi. L'exemple ci-dessous est une présentation complète de la façon dont vous pouvez récupérer les données des sites Web d'emploi. L'image ci-dessous représente le site Web dont nous allons récupérer les données.
Dans le code ci-dessous, nous allons essayer d'extraire le titre du poste , emplacement, et nom de l'entreprise pour chaque emploi répertorié. N'hésitez pas à exécuter le code sur votre système et à visualiser le résultat.
import requests from bs4 import BeautifulSoup # create User-Agent (optional) headers = {"User-Agent": "Mozilla/5.0 (CrKey armv7l 1.5.16041) AppleWebKit/537.36 (KHTML, like Gecko) " "Chrome/31.0.1650.0 Safari/537.36"} # get() Request response = requests.get("http://pythonjobs.github.io/", headers=headers) # Store the webpage contents webpage = response.content # Check Status Code (Optional) # print(response.status_code) # Create a BeautifulSoup object out of the webpage content soup = BeautifulSoup(webpage, "html.parser") # The logic for job in soup.find_all('section', class_='job_list'): title = [a for a in job.find_all('h1')] for n, tag in enumerate(job.find_all('div', class_='job')): company_element = [x for x in tag.find_all('span', class_='info')] print("Job Title: ", title[n].text.strip()) print("Location: ", company_element[0].text.strip()) print("Company: ", company_element[3].text.strip()) print()
Sortie :
Job Title: Software Engineer (Data Operations) Location: Sydney, Australia / Remote Company: Autumn Compass Job Title: Developer / Engineer Location: Maryland / DC Metro Area Company: National Institutes of Health contracting company. Job Title: Senior Backend Developer (Python/Django) Location: Vienna, Austria Company: Bambus.io
✨ Vidéo pas à pas du code ci-dessus :
Exemple 4 :Extraction de données d'une librairie en ligne
Le scraping Web est utilisé à grande échelle lorsqu'il s'agit d'extraire des informations sur les produits à partir de sites Web d'achat. Dans cet exemple, nous verrons comment extraire des données sur les livres/produits d'alibris.com.
L'image ci-dessous représente la page Web à partir de laquelle nous allons récupérer des données.
Le code ci-dessous montre comment extraire :
- Le nom de chaque Livre,
- Le nom de l'auteur,
- Le prix de chaque livre.
# import the required libraries import requests from bs4 import BeautifulSoup # create User-Agent (optional) headers = {"User-Agent": "Mozilla/5.0 (Linux; U; Android 4.2.2; he-il; NEO-X5-116A Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30"} # get() Request response = requests.get( "https://www.alibris.com/search/books/subject/Fiction", headers=headers) # Store the webpage contents webpage = response.content # Check Status Code (Optional) # print(response.status_code) # Create a BeautifulSoup object out of the webpage content soup = BeautifulSoup(webpage, "html.parser") # The logic for parent in soup.find_all('ul',{'class':'primaryList'}): for n,tag in enumerate(parent.find_all('li')): title = [x for x in tag.find_all('p', class_='bookTitle')] author = [x for x in tag.find_all('p', class_='author')] price = [x for x in tag.find_all('a', class_='buy')] for item in title: print("Book: ",item.text.strip()) for item in author: author = item.text.split("\n") print("AUTHOR: ",author[2]) for item in price: if 'eBook' in item.text.strip(): print("eBook PRICE: ", item.text.strip()) else: print("PRICE: ", item.text.strip()) print()
Sortie : Veuillez télécharger le fichier ci-dessous pour afficher les données extraites à la suite de l'exécution du code ci-dessus.
Cliquez pour télécharger et afficher la sortie✨ Vidéo pas à pas du code ci-dessus :
Exemple 5 :Scraper à l'aide de liens relatifs
Jusqu'à présent, nous avons vu des exemples où nous avons récupéré des données directement à partir d'une page Web. Nous allons maintenant découvrir comment extraire des données de sites Web contenant des hyperliens. Dans cet exemple, nous allons extraire des données de https://codingbat.com/. Essayons d'extraire toutes les questions répertoriées dans la catégorie Python dans codingbat.com.
La démonstration ci-dessous illustre un exemple de données que nous allons extraire du site Web.
Solution :
# 1. Import the necessary LIBRARIES import requests from bs4 import BeautifulSoup # 2. Create a User Agent (Optional) headers = {"User-Agent": "Mozilla/5.0 (Linux; U; Android 4.2.2; he-il; NEO-X5-116A Build/JDQ39) AppleWebKit/534.30 (" "KHTML, like Gecko) Version/4.0 Safari/534.30"} # 3. Send get() Request and fetch the webpage contents response = requests.get('http://codingbat.com/python', headers=headers) webpage = response.content # 4. Check Status Code (Optional) # print(response.status_code) # 5. Create a Beautiful Soup Object soup = BeautifulSoup(webpage, "html.parser") # The Logic url = 'https://codingbat.com' div = soup.find_all('div', class_='summ') links = [url + div.a['href'] for div in div] for link in links: #print(link) second_page = requests.get(link, headers={ "User-Agent": "Mozilla/5.0 (Linux; U; Android 4.2.2; he-il; NEO-X5-116A Build/JDQ39) AppleWebKit/534.30 (" "KHTML, like Gecko) Version/4.0 Safari/534.30"}) sub_soup = BeautifulSoup(second_page.content, 'html.parser') div = sub_soup.find('div', class_='tabc') question = [url + td.a['href'] for td in div.table.find_all('td')] for link in question: third_page = requests.get(link) third_soup = BeautifulSoup(third_page.content, 'html.parser') indent = third_soup.find('div', attrs={'class': 'indent'}) problem = indent.table.div.string siblings_of_statement = indent.table.div.next_siblings demo = [sibling for sibling in siblings_of_statement if sibling.string is not None] print(problem) for example in demo: print(example) print("\n")
Sortie : Veuillez télécharger le fichier ci-dessous pour afficher les données extraites à la suite de l'exécution du code ci-dessus.
Cliquez pour télécharger et afficher la sortieConclusion
J'espère que vous avez apprécié les exemples abordés dans l'article. Veuillez vous abonner et rester à l'écoute pour plus d'articles et de contenus vidéo à l'avenir !