Python >> Tutoriel Python >  >> Python

Python BeautifulSoup Exemples

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 :

  1. Inspecter le HTML et CSS code derrière le site Web/la page Web.
  2. Importez les bibliothèques nécessaires.
  3. Créer un agent utilisateur (Facultatif).
  4. Envoyer get() demander et récupérer le contenu de la page Web.
  5. Vérifiez le code d'état après avoir reçu la réponse.
  6. Créez un Beautiful Soup Object et définissez l'analyseur.
  7. 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 sortie

Conclusion

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 !


Prochain article