[PYTHON] Gratter avec une belle soupe en 10 minutes

introduction

Bonjour. Je travaille comme comptable dans une entreprise informatique. Je travaille pour une société informatique, je souhaite donc utiliser la programmation dans mon travail de back-office ...! J'ai essayé de toucher Python avec ce sentiment.

J'ai écrit pour une telle personne

--Les personnes qui veulent en savoir plus sur le grattage ――Les gens qui recherchent quelque chose qu'ils peuvent faire avec un peu de programmation

table des matières

―― Que pouvez-vous faire avec le grattage? ――Comment fonctionne le grattage?

Que peut faire le grattage?

** Toutes les informations peuvent être extraites et traitées ** à partir du HTML acquis. Plus précisément, vous pouvez utiliser le grattage pour ce faire.

--Travail automatique d'accès au même site Web tous les jours et de publication d'informations dans un fichier csv --Téléchargez toutes les images frappées avec un mot-clé spécifique sur SNS --Créez une liste de ventes en extrayant les entreprises qui s'appliquent à un mot-clé spécifique

Comment fonctionne le grattage?

Grosso modo ** Acquisition d'informations sur le site → Extraction d'informations → Sortie des résultats ** Il y a 3 étapes.

Dans cet article, je vais vous montrer comment utiliser Python pour le scraping. Cette fois, j'ai utilisé les deux suivants.

--BeautifulSoup bibliothèque (extraction d'informations, sortie de résultats) --Un module appelé urllib (acquisition d'informations sur le site)

Plus précisément, le traitement suivant est effectué.

  1. Obtenez toutes les informations HTML et XML. (Cet article se concentre sur HTML.)
  2. Envoyez une demande à l'URL à extraire et obtenez le HTML.
  3. Créez un objet BeautifulSoup à partir du code HTML acquis
  4. Spécifiez l'élément HTML contenant les informations que vous souhaitez extraire.
  5. La valeur contenue dans l'élément HTML spécifié peut être extraite.

Lors de la spécification d'éléments HTML, des méthodes de recherche et de sélection de type sont fournies. Cette fois, nous nous concentrerons sur la recherche de méthodes.

--find (): renvoie un seul élément --findAll (): renvoie une liste d'éléments qui remplissent les conditions

Jetons un coup d'œil à l'échantillon immédiatement.

Préparation

① Téléchargez python https://www.javadrive.jp/python/install/index1.html

② Installez une belle soupe Il peut être installé avec pip.

$ pip install beautifulsoup4

③ Installation d'urllib Cela peut également être installé avec pip.

$ pip install urllib3

Exemple de code

J'essaierai d'obtenir le titre de notre page d'accueil.

sample.py


import urllib.request #urllib disponible
from bs4 import BeautifulSoup  #Belle soupe disponible

r = urllib.request.urlopen(‘https://www.is-tech.co.jp/’) #Obtenir des informations Obtenir le code HTML de la page à traiter
html = r.read().decode('utf-8', 'ignore') #HTML utf-Convertir en 8 et lire
parser = "html.parser" #Spécifiez la destination des informations en HTML
soup = BeautifulSoup(html, parser) #Achèvement de l'objet BeautifulSoup
     
title = soup.find("title").text #Spécifiez les caractères inclus dans la balise de titre en HTML comme cible d'extraction

print(title) #Afficher les caractères inclus dans la balise de titre

résultat

image2.png

J'ai pu l'extraire.

Exemple d'application

Supposons que vous ayez un site Web fictif comme celui de l'image ci-dessous. Il s'agit d'un site où les informations financières des sociétés cotées fictives sont résumées sur chaque page. Les ventes des 3 dernières années sont extraites pour chaque entreprise et sorties au format csv. L'URL est https://www.example.com/NNNN.

image3.png

example.com/NNNN.html


<!DOCTYPE html>
</html>
<html>
<head>
   <meta charset="utf-8">
   <title>L'information financière</title>
</head>
​
<body>
   <h1 class="company">Hogehoge Co., Ltd.</h1>
   <table class="information">
       <tr>
       <td> </td>
       <td>Premier mandat</td>
       <td>Il y a 2 termes</td>
       <td>Il y a 3 termes</td>
       </tr>
​
       <tr>
       <td>montant des ventes</td>
       <td>1,200 millions de yens</td>
       <td>1,100 millions de yens</td>
       <td>1,000 millions de yens</td>
       </tr>
​
       <tr>
       <td>Bénéfice ordinaire</td>
       <td>240 millions de yens</td>
       <td>220 millions de yens</td>
       <td>200 millions de yens</td>
       </tr>
​
       <tr>
       <td>Revenu net</td>
       <td>120 millions de yens</td>
       <td>110 millions de yens</td>
       <td>100 millions de yens</td>
       </tr>
   </table>
</body>

Ajoutez l'arrangement suivant à l'exemple du titre extrait de la page d'accueil précédemment.

--Répéter le traitement du code de titres à 4 chiffres (1000 à 9999)

sample2.py


import urllib.request
from bs4 import BeautifulSoup
import csv #Traitement lié au CSV disponible
import time #Possibilité de suspendre le traitement
 
class Scraper:
   def __init__(self, site, code):  #Créer une classe
       self.site = site
       self.code = code
 
   def scrape(self): #Créer une instance
       url = str(self.site) + str(self.code) #URL d'entreprise
 
       r = urllib.request.urlopen(url) 
       html = r.read().decode('utf-8', 'ignore')
       parser = "html.parser"
       soup = BeautifulSoup(html, parser) #Achèvement de l'objet soupe
 
       company = soup.find("h1") #Obtenir le nom de l'entreprise
 
       if "Page d'informations sur l'entreprise introuvable" in company.text: #S'il n'y a pas de société avec le code des valeurs mobilières applicable, aucun traitement ne sera effectué.
           pass
 
       else: #Autrement
           table = soup.find("table") #Tableau avec informations financières pour les 3 derniers trimestres
           data = table.findAll("td") #Spécifiez toutes les tables avec des balises td
           sales = data[5].text.split('Un million de yens')[0] #Ventes du trimestre précédent(=6ème balise td dans les données)
           sales_two_years_ago = data[6].text.split('Un million de yens')[0] #Ventes il y a deux trimestres(=7ème balise td dans les données)
           sales_three_years_ago = data[7].text.split('Un million de yens')[0] #Ventes il y a 3 mois(=8e balise td dans les données)
 
           row = [code, company, sales, sales_two_years_ago, sales_three_years_ago] #Listé pour la sortie vers csv
           
           with open('test.csv', 'a', newline ='') as f: #Exporter vers csv
               writer = csv.writer(f)
               writer.writerow(row)
           time.sleep(5) #Suspendre le traitement pendant 5 secondes
 
source = "https://www.example.com/" #Partie commune de l'URL
for i in range(1000, 10000):      #Traitement itératif pour les codes titres 1000 à 9999
   Scraper(source, i).scrape()

résultat

image1.png De cette façon, toutes les informations de l'entreprise peuvent être sorties vers csv.

Mise en garde

J'ai créé le code pour gratter Yahoo! Finance pour automatiser mon entreprise, mais c'était interdit par les conditions d'utilisation ... Lorsque vous utilisez le scraping, veuillez ** vérifier les conditions d'utilisation du site Web à l'avance **. Selon le site, l'API peut être ouverte au public, il existe donc également un moyen d'utiliser l'API pour le traitement.

Recommended Posts

Gratter avec une belle soupe en 10 minutes
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
Grattage de site Web avec Beautiful Soup en Python
Écrivez un "bot" de scraping web sans tête de base en Python avec Beautiful Soup 4
Grattage au sélénium en Python
Grattage avec chromedriver en python
Grattage avec du sélénium en Python
Grattage avec Tor en Python
Pratique de l'exploration avec Beautiful Soup
Notez que j'ai traité du HTML dans Beautiful Soup
Belle soupe
Gratter les résultats de recherche de Google Actualités en Python (2) Utiliser Beautiful Soup
[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
Triez les visages d'anime en grattant les pages de personnages d'anime avec Beautiful Soup et Selenium
Créez un environnement Django avec Vagrant en 5 minutes
Réalisez le scraping avec le sélecteur Python et CSS en 1 minute
Grattage réussi avec Selenium
Grattage en Python (préparation)
Essayez de gratter avec Python.
Apprenez les pandas en 10 minutes
J'obtiens une erreur d'importation avec Python Beautiful Soup
Grattage avec Python + PhantomJS
Ma belle soupe (Python)
Super Primer to python - Premiers pas avec python3.5 en 3 minutes
J'étais accro au grattage avec Selenium (+ Python) en 2020
Grattage avec coquille tremblante
Comprendre en 10 minutes le sélénium
Le sélénium fonctionne en 15 minutes
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]
Scraping avec Python + PyQuery
[Python] Supprimer en spécifiant une balise avec Beautiful Soup
Scraping RSS avec Python
Essayez de gratter les données COVID-19 Tokyo avec Python
J'ai essayé de gratter avec Python
Télécharger automatiquement des images avec grattage
Web scraping avec python + JupyterLab
Grattage avec Selenium + Python Partie 1
[Python] Scraping dans AWS Lambda
Exploitez LibreOffice avec Python
Grattage festif avec Python, scrapy
Débogage avec pdb en Python
Enregistrez des images avec le web scraping
Gérer les sons en Python
Compromis dans le scraping et l'exploration Web
Grattage Web facile avec Scrapy