[PYTHON] Peut-être que ça marche! Essayons de gratter!

introduction

Je voulais essayer de gratter, mais je n'y ai pas touché, mais je me suis finalement levé et je l'ai touché, et j'ai résumé ce que j'avais enquêté à ce moment-là. J'espère que cela sera utile pour ceux qui souhaitent commencer le scraping Web.

environnement


$ python --version
Python 3.7.4
$ conda --version
conda 4.7.12
$ pip -V
pip 19.2.3 from ■■■■■■■■■■■■■■■■■■■ (python 3.7)

Installation

Cette fois, nous utiliserons anaconda pour le grattage. Si vous en avez besoin, veuillez l'installer. version Windows anaconda version Mac anaconda

Si vous ne souhaitez pas installer anaconda, veuillez installer la bibliothèque suivante à partir de pip. (Il est installé en standard dans anaconda.)


$ pip install requests
$ pip install beautifulsoup4
$ pip install lxml

À propos de la bibliothèque

Requests

Une bibliothèque de communication HTML qui permet d'obtenir facilement des informations HTML / XML et des images de sites Web. La bibliothèque de communication HTTP appelée urllib est installée dans la bibliothèque Python standard, mais l'API ne peut pas être utilisée correctement ** (demande la vue officielle) **. ** **

Beautiful Soup 4

Une bibliothèque d'analyseurs HTML qui extrait du texte spécifique du HTML / XML acquis.

lxml

Analyseur HTML. Python a html.parser comme bibliothèque standard, mais lxml semble être plus facile à utiliser.

Premiers pas avec le scraping Web

Cette fois, je vais vous présenter comment obtenir le titre des principales nouvelles de Yahoo News à titre d'exemple. L'exemple de code est rassemblé à la fin de l'article.

Créez un fichier 1 py et importez les demandes et BeautifulSoup4 avec la description suivante.


    import requests
    from bs4 import BeautifulSoup

2 Définissez l'URL et obtenez le HTML avec les demandes.


    url = 'https://news.yahoo.co.jp/'
    rq = requests.get(url)

3 Créez un objet pour l'analyse HTML.


    bs = BeautifulSoup(rq.text, 'lxml')

4 Utilisez les outils de développement de Chrome pour trouver la pièce dont vous avez besoin.

La partie commune aux titres des principales actualités est entourée de balises li, et le nom de la classe est "topicsListItem".

Découpez la partie nécessaire du HTML en fonction des conditions trouvées dans 5 4.


    newsList = bs.find_all("li", class_="topicsListItem")

Dans cet état, chaque étiquette li est acquise.

6 Je veux seulement la partie de texte de la liste de coupes, donc je get_text () et puis je la sortie.


    for news in newsList:
      print(news.get_text())

résultat

Fraude aux prestations Une série d'autoconsultations
GoTo Inns où les réservations pour les résidents de Tokyo sont effectuées l'une après l'autre
Le président américain Yémen condamné à mort
Couverture violente Le journal de Tokyo s'excuse
Récupérer après une défaillance du système docomo
Dernier GP de Yuru Chara Tohoku First V
GI à courte portée Gran Alegria V
Mikako Tabe je n'attends personne

Vous l'avez bien!

Exemple de code


import requests
from bs4 import BeautifulSoup
    
url = 'https://news.yahoo.co.jp/'
rq = requests.get(url)
    
bs = BeautifulSoup(rq.text, 'lxml')
newsList = bs.find_all("li", class_="topicsListItem")
    
for news in newsList:
  print(news.get_text())

Recommended Posts

Peut-être que ça marche! Essayons de gratter!
Essayez de gratter avec Python.
Essayons un script shell
Cela pourrait être récursif