[Pour les débutants] Essayez le web scraping avec Python

Hypothèse du lecteur

On dit que c'est pour les débutants, mais je suis aussi un débutant. Après avoir compris le simple exemple de code de web scraping, j'ai voulu lui donner un peu d'originalité, donc je l'ai essayé en enquêtant. Si je l'ai exécuté selon le code de référence du web scraping, j'ai pu en extraire le titre et ainsi de suite! Si c'est le niveau 1, je pense que cette fois il s'agit du niveau 2. Donc, je pense qu'il peut y avoir des malentendus, donc si vous avez des suggestions, veuillez commenter.

introduction

environnement

python 3.7.3 Je l'ai développé avec du code Visual Studio.

Importer la bibliothèque

Python a une bibliothèque HTTP appelée "urlib2", mais ce n'est pas facile à utiliser, j'utilise donc les bibliothèques "Requests" et "BeautifulSoup" pour le web scraping. Obtenez la page Web avec Requests et extrayez son HTML avec Beautiful Soup.

Faisons le!

Contenu de grattage

Version électronique Nikkei Business https://business.nikkei.com/ Je vais essayer d'obtenir le titre et l'URL du nouvel article à partir de.

Accédez avec Google Chrome et appuyez sur F12 pour accéder aux outils de développement (mode de vérification).

Je veux savoir quelle partie du HTML est la nouvelle partie d'article, alors appuyez sur Ctrl + Maj + C pour déplacer le curseur vers l'en-tête.

コメント 2020-03-31 212354.jpg コメント 2020-03-31 212442.jpg Ensuite, j'ai trouvé que le nom sérialisé de l'article se trouve dans la partie où la classe est catégorie. コメント 2020-03-31 212502.jpg コメント 2020-03-31 220521.jpg

L'en-tête de l'article est dans la balise h3. En outre, vous pouvez voir que l'URL est dans la partie balise un peu au-dessus. Cette relation est illustrée dans la figure ci-dessous. Plus tard, je voudrais l'expliquer avec le programme.

図1.png

Description du code

code.py


import requests
from bs4 import BeautifulSoup
import re

urlName = "https://business.nikkei.com"
url = requests.get(urlName)
soup = BeautifulSoup(url.content, "html.parser")

Établissez une connexion http avec la bibliothèque de requêtes et analysez html avec BeautifulSoup.

code.py


elems = soup.find_all("span")

Tout d'abord, stockez tous les éléments span dans elems.

code.py


for elem in elems: 
  try:
    string = elem.get("class").pop(0)
    if string in "category":
      print(elem.string)
      title = elem.find_next_sibling("h3")
      print(title.text.replace('\n',''))
      r = elem.find_previous('a')
      print(urlName + r.get('href'), '\n')
  except:
    pass

Ensuite, prenez le nom de la classe de l'élément span pour déterminer s'il s'agit d'une catégorie. Si la classe est category, le texte du nom de série est extrait à l'aide de .string.

Ensuite, l'étape suivante consiste à obtenir le contenu de l'en-tête. L'en-tête était dans la balise h3. La balise h3 était à la même profondeur, juste en dessous. Utilisez donc find_next_sibling () pour trouver h3 à la même profondeur après l'élément.

図2.png

Le texte extrait peut également avoir une image, et il peut ou non contenir des sauts de ligne, donc je l'ai supprimé si c'était le cas.

Enfin, je voudrais extraire l'URL. C'était la même profondeur auparavant, mais la balise a est une profondeur plus élevée. Par conséquent, j'ai utilisé find_previous () pour rechercher la balise a et utilisé la méthode get pour obtenir la valeur d'attribut spécifiée de l'élément afin de récupérer l'adresse href.

図3.png

Voici quelques-uns des résultats de l'exécution.

Vol direct de Yuka Ikematsu au départ de New York
Un énorme navire-hôpital de l'US Navy entre à New York. Pas encore assez de lits
https://business.nikkei.com/atcl/gen/19/00119/033100011/

Yohei Ichishima's Silicon Valley Insai ...
Vivre dans une «économie de la demande à 20%» post-Corona Penser et faire évoluer l'industrie de la restauration aux États-Unis
https://business.nikkei.com/atcl/gen/19/00137/033100002/

Muneaki Hashimoto anticipe la médecine et les soins médicaux
Yoshi Shiono et le président Teshirogi s'abstiennent de conspiration en partenariat avec China Heian Insurance
https://business.nikkei.com/atcl/gen/19/00110/033100012/ 

De cette façon, j'ai pu l'obtenir.

à la fin

J'étudie toujours, alors je me demande s'il y a des malentendus ou de meilleures façons. J'aimerais le pratiquer tout en approfondissant ma compréhension petit à petit.

Recommended Posts

[Pour les débutants] Essayez le web scraping avec Python
Web scraping pour les débutants en Python (1)
Essayez de gratter avec Python.
Grattage WEB avec Python (pour mémo personnel)
Web scraping avec python + JupyterLab
Web scraping débutant avec python
Web scraping pour les débutants en Python (1) Version améliorée
Analyse de données pour améliorer POG 1 ~ Web scraping avec Python ~
Scraping Web pour débutants avec Python (4) --2 Scraping sur Cloud Shell
Essayez de gratter avec Python + Beautiful Soup
Web scraping avec Python Première étape
J'ai essayé webScraping avec python.
Grattage avec Python
Grattage avec Python
(Pour les débutants) Essayez de créer une API Web simple avec Django
INSÉRER dans MySQL avec Python [Pour les débutants]
Premiers pas avec Python Web Scraping Practice
[Note personnelle] Scraping de pages Web en python3
Site de courses de chevaux Web scraping avec Python
Premiers pas avec Python Web Scraping Practice
Essayez le scraping HTML avec la bibliothèque Python
[Pour les débutants] Web scraping avec Python "Accédez à l'URL de la page pour obtenir le contenu"
[Python] Lire des images avec OpenCV (pour les débutants)
Création WebApi avec Python (création CRUD) Pour les débutants
Pratiquer le web scraping avec Python et Selenium
Scraping Web facile avec Python et Ruby
Préparation au grattage au python [Saveur chocolat]
Grattage en Python (préparation)
Grattage avec Python + PhantomJS
Manuel python pour les débutants
Grattage avec du sélénium [Python]
Scraping avec Python + PyQuery
OpenCV pour les débutants en Python
Scraping RSS avec Python
Exécutez régulièrement le scraping WEB avec AWS-Lambda + Python + Cron
Raisonnement causal et recherche causale par Python (pour les débutants)
~ Conseils pour les débutants de Python donnés avec amour par Pythonista ① ~
Web scraping avec Python (prévisions météo)
Web scraping avec Python (cours de l'action)
~ Conseils pour les débutants de Python donnés avec amour par Pythonista ② ~
[Introduction pour les débutants] Manipuler MySQL avec Python
J'ai essayé de gratter avec Python
Grattage au sélénium en Python
Grattage avec Selenium + Python Partie 1
Flux d'apprentissage pour les débutants en Python
Grattage festif avec Python, scrapy
Essayez la sortie Python avec Haxe 3.2
Enregistrez des images avec le web scraping
Grattage avec Tor en Python
API Web avec Python + Falcon
Python #function 2 pour les super débutants
WEB grattage avec python et essayez de créer un nuage de mots à partir des critiques
Web scraping avec Selenium (Python)
Scraping prévisions météorologiques avec python
Essayez d'exécuter Python avec Try Jupyter
Grammaire de base Python pour les débutants
Grattage avec Selenium + Python Partie 2