Grattage de site Web avec Beautiful Soup en Python

À propos de cet article

Comme je l'ai déjà écrit dans Qiita, j'ai écrit Code pour gratter les sites Web en Java. Avec le recul maintenant, il est difficile de dire que le contenu du code est propre, bien qu'il réponde aux exigences. J'étais gêné de le voir, alors j'ai décidé de le réécrire en Python, alors prenez note.

Il y a beaucoup d'articles similaires dans Qiita, mais c'est un mémorandum.

À propos de Beautiful Soup

J'utilisais une bibliothèque appelée jsoup lors du scraping avec Java. Cette fois, nous utiliserons ** Beautiful Soup **.

BeautifulSoup est une bibliothèque pour gratter Python. Puisque vous pouvez extraire les éléments de la page à l'aide du sélecteur CSS, il est pratique d'extraire uniquement les données souhaitées dans la page. Officiel: https://www.crummy.com/software/BeautifulSoup/bs4/doc/

Puisqu'il s'agit d'une bibliothèque Python, elle est installée avec pip.

pip install beautifulsoup4

Exemple d'utilisation

Comme l'article que j'ai écrit auparavant, je souhaite extraire la date, le titre et l'URL de "Notice" de la page suivante.

<body> 
 <div class="section"> 
  <div class="block"> 
   <dl>
    <dt>2019.08.04</dt> 
    <dd>
     <a href="http://www.example.com/notice/0003.html">Avis 3</a>
    </dd> 
    <dt>2019.08.03</dt> 
    <dd>
     <a href="http://www.example.com/notice/0002.html">Avis 2</a>
    </dd> 
    <dt>2019.08.02</dt> 
    <dd>
     <a href="http://www.example.com/notice/0001.html">Avis 1</a>
    </dd> 
   </dl>
  </div>
 </div>
</body>

Extrayez la notification avec le code suivant et imprimez-la.

scraping.py


# -*- coding: utf-8 -*-
import requests
import sys
from bs4 import BeautifulSoup
from datetime import datetime as d

def main():

    print("Scraping Program Start")

    #Envoyez une requête GET à l'URL spécifiée pour obtenir le contenu de la page
    res=requests.get('http://www.example.com/news.html')

    #Analyser la page HTML récupérée dans un objet BeautifulSoup
    soup = BeautifulSoup(res.text, "html.parser")

    #Extraire tout l'élément de classe de bloc dans la page
    block = soup.find(class_="block")

    #Extraire l'élément dt (date) et l'élément dd dans la classe de bloc
    dt = block.find_all("dt")
    dd = block.find_all("dd")

    if(len(dt) != len(dd)):
        print("ERROR! The number of DTs and DDs didn't match up.")
        print("Scraping Program Abend")
        sys.exit(1)

    newsList = []

    for i in range(len(dt)):
        try:
            date = dt[i].text
            title = dd[i].find("a")
            url = dd[i].find("a").attrs['href']

            print("Got a news. Date:" + date +", title:" + title.string + ", url:" + url)

        except:
            print("ERROR! Couldn't get a news.")
            pass

    print("Scraping Program End")

if __name__ == "__main__":
    main()

Le résultat attendu lors de l'exécution du code ci-dessus est le suivant.

Scraping Program Start
Got a news. Date:2019.08.04, title:Avis 3, url:http://www.example.com/notice/0003.html
Got a news. Date:2019.08.03, title:Avis 2, url:http://www.example.com/notice/0002.html
Got a news. Date:2019.08.04, title:Avis 1, url:http://www.example.com/notice/0001.html
Scraping Program End

en conclusion

Par rapport à la dernière fois que j'ai écrit dans Spring Boot de Java, il est bon que la quantité de codage en Python soit extrêmement faible. Veuillez signaler toute erreur dans le contenu.

Recommended Posts

Grattage de site Web avec Beautiful Soup en Python
Gratter avec une belle soupe
Grattage de table avec belle soupe
Essayez de gratter avec Python + Beautiful Soup
Racler plusieurs pages avec Beautiful Soup
Grattage avec Python et belle soupe
Pratique de l'exploration avec Beautiful Soup
Belle soupe
[Python] Gratter une table avec Beautiful Soup
Supprimez les balises HTML indésirables avec Beautiful Soup
Grattage au sélénium
Grattage au sélénium ~ 2 ~
Grattage avec Python
Grattage avec Python
Belle note de soupe
Belles éclaboussures de soupe
Grattage avec du sélénium
Écrivez un "bot" de scraping web sans tête de base en Python avec Beautiful Soup 4
Grattage réussi avec Selenium
Grattage en Python (préparation)
Essayez de gratter avec Python.
Grattage avec Python + PhantomJS
Ma belle soupe (Python)
Grattage avec coquille tremblante
Scraping: enregistrer le site Web localement
J'ai essayé différentes choses avec Python: le grattage (Beautiful Soup + Selenium + PhantomJS) et l'analyse morphologique
Grattage avec du sélénium [Python]
Notez que j'ai traité du HTML dans Beautiful Soup
Scraping avec Python + PyQuery
[Python] Supprimer en spécifiant une balise avec Beautiful Soup
Scraping RSS avec Python
[Python] Pratique Belle Soupe ~ Grattage du tableau des cotes triple simple sur le site officiel de la course de bateaux ~
Gratter les résultats de recherche de Google Actualités en Python (2) Utiliser Beautiful Soup
J'ai essayé de gratter avec Python
Télécharger automatiquement des images avec grattage
Web scraping avec python + JupyterLab
Reconnaissance faciale avec OpenCV de Python
Grattage au sélénium en Python
Grattage avec Selenium + Python Partie 1
Grattage avec chromedriver en python
Implémenter des sous-commandes avec l'argparse de Python
Grattage festif avec Python, scrapy
Enregistrez des images avec le web scraping
Scraping du site officiel GoToEat de Shizuoka
Grattage avec du sélénium en Python
Grattage Web facile avec Scrapy
Grattage avec Tor en Python
Travailler avec des sites Web à l'aide de Python_Webbrowser
Scraping prévisions météorologiques avec python
Grattage avec Selenium + Python Partie 2
Obtenez l'URL de destination du lien en spécifiant la phrase de texte avec le grattage Python (Beautiful Soup) + XPath
J'ai essayé de gratter avec du python
Web scraping débutant avec python
Gratter la page i-town avec du sélénium
[Python, Selenium, PhantomJS] Une histoire lors de la capture d'un site Web avec une charge paresseuse