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.
python 3.7.3 Je l'ai développé avec du code Visual Studio.
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.
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.
Ensuite, j'ai trouvé que le nom sérialisé de l'article se trouve dans la partie où la classe est catégorie.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.
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.
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.
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.
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