Web scraping pour les débutants en Python (1)

Je ne connais pas le caractère en forme de K dans le cloud ou le caractère en forme de P en Python. Cela fait un mois que j'ai commencé à étudier Python + GCP. A commencé à s'intéresser au web scraping en Python Comment utiliser les requêtes, divers attributs de l'objet de requêtes, Lors de l'apprentissage de l'analyse HTML avec BeutifuruSoup Tout d'abord, je vais contester le grattage de Yahoo News.

Feuille de route pour l'apprentissage du web scraping en Python

(1) Réussir à gratter le contenu cible localement pour le moment. ← Maintenant ici (2) Liez les résultats de la récupération locale à une feuille de calcul Google. (3) cron est automatiquement exécuté localement. (4) Défiez l'exécution automatique gratuite sur le serveur cloud. (Google Compute Engine) (5) Défiez l'exécution automatique gratuite sans serveur sur le cloud. (Peut-être Cloud Functions + Cloud Scheduler)

Fonctions de l'échantillon PGM (1)

・ Obtenez des informations sur le site Web à l'aide de demandes ・ Analyser html avec Beautiful Soup -Rechercher une chaîne de caractères spécifique avec la bibliothèque re qui peut rechercher des chaînes de caractères (identifier les nouvelles de titre) -Afficher tous les titres d'actualités et les liens de la liste des résultats acquis sur la console

Que sont les demandes?

Une bibliothèque externe pour la communication HTTP avec Python. Vous pouvez simplement collecter des informations sur le site Web. Vous pouvez également obtenir l'url en utilisant urllib, qui est la bibliothèque standard de python, Si vous utilisez des requêtes, la quantité de code est faible et vous pouvez l'écrire simplement. Cependant, puisqu'il s'agit d'une bibliothèque tierce, elle doit être installée.

Demandes d'installation

Il peut être installé avec pip. Voici l'état propre de l'environnement virtuel créé avec venv.

bash


$ virtualenv -p python3.7 env3
% source env3/bin/activate
(env3) % pip list
Package    Version
---------- -------
pip        20.2.3
setuptools 49.2.1
wheel      0.34.2

Installez avec pip. Vérifiez la liste des pip pour voir si elle est dans (et version). Parallèlement à cela, diverses choses sont également incluses.

bash


(env3) % pip install requests
Collecting requests
  Using cached requests-2.24.0-py2.py3-none-any.whl (61 kB)
Collecting idna<3,>=2.5
  Using cached idna-2.10-py2.py3-none-any.whl (58 kB)
Collecting chardet<4,>=3.0.2
  Using cached chardet-3.0.4-py2.py3-none-any.whl (133 kB)
Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1
  Using cached urllib3-1.25.10-py2.py3-none-any.whl (127 kB)
Collecting certifi>=2017.4.17
  Using cached certifi-2020.6.20-py2.py3-none-any.whl (156 kB)
Installing collected packages: idna, chardet, urllib3, certifi, requests
Successfully installed certifi-2020.6.20 chardet-3.0.4 idna-2.10 requests-2.24.0 urllib3-1.25.10
(env3) % pip list
Package    Version
---------- ---------
certifi    2020.6.20
chardet    3.0.4
idna       2.10
pip        20.2.3
requests   2.24.0
setuptools 49.2.1
urllib3    1.25.10
wheel      0.34.2

méthode des requêtes

Dans les requêtes, il s'agit d'une méthode de requête HTTP générale, Il prend en charge des méthodes telles que get, post, put, delete. Cette fois, nous utiliserons get.

Attributs de l'objet de réponse pour les requêtes

L'objet de réponse renvoyé par requests.get contient divers attributs. Dans cet exemple de programme, les attributs suivants ont été confirmés par impression.

attribut Ce qui peut être confirmé
url Vous pouvez obtenir l'URL consultée.
status_code Code d'état(État HTTP)Peut être obtenu.
headers Vous pouvez obtenir l'en-tête de la réponse.
encoding Vous pouvez obtenir le codage que Requests deviné.

En outre, il existe un attribut de texte et un attribut de contenu.

L'attribut headers est un type de dict (dictionnaire), et Yahoo News contient de nombreuses clés comme indiqué ci-dessous, donc dans l'exemple de programme, la touche "Content-Type" est extraite de l'attribut headers et imprimée.

bash


{'Cache-Control': 'private, no-cache, no-store, must-revalidate', 'Content-Encoding': 'gzip', 'Content-Type': 'text/html;charset=UTF-8', 'Date': 'Wed, 09 Sep 2020 02:24:04 GMT', 'Set-Cookie': 'B=6rffcc5flgf64&b=3&s=sv; expires=Sat, 10-Sep-2022 02:24:04 GMT; path=/; domain=.yahoo.co.jp, XB=6rffcc5flgf64&b=3&s=sv; expires=Sat, 10-Sep-2022 02:24:04 GMT; path=/; domain=.yahoo.co.jp; secure; samesite=none', 'Vary': 'Accept-Encoding', 'X-Content-Type-Options': 'nosniff', 'X-Download-Options': 'noopen', 'X-Frame-Options': 'DENY', 'X-Vcap-Request-Id': 'd130bb1e-4e53-4738-4b02-8419633dd825', 'X-Xss-Protection': '1; mode=block', 'Age': '0', 'Server': 'ATS', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Via': 'http/1.1 edge2821.img.kth.yahoo.co.jp (ApacheTrafficServer [c sSf ])'}

Source de la partie requests.get

Cliquez ici pour l'extrait source de requests.get et chaque attribut affiche une partie de l'objet de réponse acquis.

python


url = 'https://news.yahoo.co.jp/'
response = requests.get(url)
#print(response.text)
print('url: ',response.url)
print('status-code:',response.status_code) #Code d'état HTTP, généralement[200 OK]
print('headers[Content-Type]:',response.headers['Content-Type']) #Les en-têtes étant un dictionnaire, vous pouvez spécifier la clé du contenu-sortie de type
print('encoding: ',response.encoding) #codage

Voici les résultats.

bash


(env3) % python requests-test.py
url:  https://news.yahoo.co.jp/
status-code: 200
headers[Content-Type]: text/html;charset=UTF-8
encoding:  UTF-8

Qu'est-ce que la belle soupe?

Beautiful Soup est une bibliothèque pour le scraping WEB de Python. Vous pouvez obtenir des données à partir de fichiers HTML et XML et les analyser. Vous pouvez facilement extraire une balise html spécifique.

Installation de beautifulsoup4

Identique aux demandes. Il peut être installé avec pip.

bash


(env3) % pip install beautifulsoup4
Collecting beautifulsoup4
  Using cached beautifulsoup4-4.9.1-py3-none-any.whl (115 kB)
Collecting soupsieve>1.2
  Using cached soupsieve-2.0.1-py3-none-any.whl (32 kB)
Installing collected packages: soupsieve, beautifulsoup4
Successfully installed beautifulsoup4-4.9.1 soupsieve-2.0.1
(env3) % pip list                  
Package        Version
-------------- ---------
beautifulsoup4 4.9.1
certifi        2020.6.20
chardet        3.0.4
idna           2.10
pip            20.2.3
requests       2.24.0
setuptools     49.2.1
soupsieve      2.0.1
urllib3        1.25.10
wheel          0.34.2

Beaux arguments de soupe

Dans Beautiful Soup, l'objet à analyser (html ou xml) est le premier argument. (L'objet de réponse obtenu par les requêtes de l'exemple) Spécifiez l'analyseur à utiliser pour l'analyse comme deuxième argument.

Analyseur Exemple d'utilisation Forces la faiblesse
Python’s html.parser BeautifulSoup(response.text, "html.parser") Bibliothèque standard Série Python2/3.2.Non compatible avec moins de 2
lxml’s HTML parser BeautifulSoup(response.text, "lxml") Vitesse explosive installation requise
lxml’s XML parser BeautifulSoup(response.text, "xml") Vitesse explosive. Seulement un analyseur XML installation requise
html5lib BeautifulSoup(response.text, "html5lib") Peut gérer correctement HTML5 installation requise. Très lent.

python


soup = BeautifulSoup(response.text, "html.parser")

BeautifulSoup a différentes méthodes, mais cette fois, nous utiliserons la méthode find_all. Vous pouvez également définir divers arguments pour la méthode find_all, mais cette fois, nous utiliserons des arguments de mots clés.

find_all: argument de mot-clé

Vous pouvez spécifier l'attribut de balise comme argument de mot-clé et obtenir les informations de la balise correspondante.

La valeur de l'argument mot-clé peut également être une chaîne, une expression régulière, une liste, une fonction ou une valeur True. Et vous pouvez spécifier plusieurs arguments de mot-clé.

Par exemple, si vous passez une valeur à href comme argument de mot-clé, Beautiful Soup filtrera l'attribut href de la balise HTML.

Citation: https://ai-inter1.com/beautifulsoup_1/#find_all_detail

En d'autres termes, "la valeur de l'attribut href correspond à l'expression régulière spécifiée", En trouvant_all depuis l'objet soupe, dans l'exemple ci-dessous, href属性の中で"news.yahoo.co.jp/pickup"が含まれているもののみ全て抽出することが可能となります。

elems = soup.find_all(href = re.compile("news.yahoo.co.jp/pickup"))

Source de l'échantillon final

À la fin, tournez-le avec une instruction for pour afficher le titre et le lien des nouvelles extraits sur la console. Cliquez ici pour la source finale de l'échantillon.

requests-test.py


import requests
from bs4 import BeautifulSoup
import re

#Télécharger les informations du site Web à l'aide de demandes
url = 'https://news.yahoo.co.jp/'
response = requests.get(url)
#print(response.text)
print('url: ',response.url)
print('status-code:',response.status_code) #Code d'état HTTP, généralement[200 OK]
print('headers[Content-Type]:',response.headers['Content-Type']) #Les en-têtes étant un dictionnaire, vous pouvez spécifier la clé du contenu-sortie de type
print('encoding: ',response.encoding) #codage

#BeautifulSoup()Informations sur le site Web et analyseur acquis dans"html.parser"donner
soup = BeautifulSoup(response.text, "html.parser")

#Dans l'attribut href"news.yahoo.co.jp/pickup"Extrayez uniquement ceux qui contiennent
elems = soup.find_all(href = re.compile("news.yahoo.co.jp/pickup"))

#Le titre et le lien des actualités extraites sont affichés sur la console.
for elem in elems:
    print(elem.contents[0])
    print(elem.attrs['href'])

La partie PGM est proche du pakuri du site que j'ai posté sur le site de référence. C'était une excellente référence.

Épilogue

Sauf pour la partie impression et importation de l'objet de réponse des demandes de confirmation, Vous pouvez gratter le Web en seulement 7 lignes. Python et la bibliothèque de son prédécesseur, terrifiants.

Cliquez ici pour les résultats. J'ai pu gratter pour le moment! La dernière des nouvelles avec des photos est superflue, mais je ne sais pas quoi faire, alors je vais la laisser telle quelle. .. ..

bash


% python requests-test.py
url:  https://news.yahoo.co.jp/
status-code: 200
headers[Content-Type]: text/html;charset=UTF-8
encoding:  UTF-8
Suspension de la majorité d'argent de la coopération de compte Docomo
https://news.yahoo.co.jp/pickup/6370639
M. Suga a corrigé les remarques sur les forces d'autodéfense
https://news.yahoo.co.jp/pickup/6370647
Producteur de fraises submergé souffrant pendant 3 années consécutives
https://news.yahoo.co.jp/pickup/6370631
Deux personnes sont mortes quand quatre personnes ont pris la mer
https://news.yahoo.co.jp/pickup/6370633
Tir de Moulin à Shinji, répulsion à nouveau
https://news.yahoo.co.jp/pickup/6370640
Les parents souffrent de trouble panique préjugé
https://news.yahoo.co.jp/pickup/6370643
Taku Hiraoka Incarcération de l'accusé pendant 2 ans et 6 mois
https://news.yahoo.co.jp/pickup/6370646
Le suspect Isetani a saisi 500 rouleaux
https://news.yahoo.co.jp/pickup/6370638
<span class="topics_photo_img" style="background-image:url(https://lpt.c.yimg.jp/amd/20200909-00000031-asahi-000-view.jpg)"></span>
https://news.yahoo.co.jp/pickup/6370647

Site de référence: https://requests-docs-ja.readthedocs.io/en/latest/ https://ai-inter1.com/beautifulsoup_1/ http://kondou.com/BS4/

Recommended Posts

Web scraping pour les débutants en Python (1)
Web scraping pour les débutants en Python (4) -1
Web scraping pour les débutants en Python (1) Version améliorée
Scraping Web pour débutants avec Python (4) --2 Scraping sur Cloud Shell
[Pour les débutants] Essayez le web scraping avec Python
Web scraping par les débutants avec Python (4) -3 Création d'instances de VM GCE et scraping sur VM
Grattage WEB avec Python (pour mémo personnel)
Manuel python pour les débutants
OpenCV pour les débutants en Python
Web scraping avec python + JupyterLab
Flux d'apprentissage pour les débutants en Python
Construction de l'environnement Python3 (pour les débutants)
Python #function 2 pour les super débutants
Grammaire de base Python pour les débutants
Pandas 100 coups pour les débutants en Python
Python #function 1 pour les super débutants
[Python + Selenium] Conseils pour le grattage
#List Python pour les super débutants
Web scraping débutant avec python
~ Conseils pour les débutants de Python présentés avec amour par Pythonista ③ ~
[Pour les débutants] Comment utiliser la commande say avec python!
Analyse de données pour améliorer POG 1 ~ Web scraping avec Python ~
Les débutants en Python sont bloqués dans leur premier scraping Web
Conseils aux débutants en Python pour utiliser l'exemple Scikit-image pour eux-mêmes 4 Utiliser l'interface graphique
Matériel pédagogique Web pour apprendre Python
Python pour les super débutants Super débutants Python # dictionnaire type 1
Web scraping avec Python Première étape
J'ai essayé webScraping avec python.
Qu'est-ce que le grattage? [Résumé pour les débutants]
Ensuite, utilisez Python (Flask) pour Heroku!
[Scraping] Scraping Python
<Pour les débutants> bibliothèque python <Pour l'apprentissage automatique>
Fonction Python #len pour les super débutants
[Pour les débutants] Web scraping avec Python "Accédez à l'URL de la page pour obtenir le contenu"
Conseils aux débutants en Python pour utiliser l'exemple Scikit-image par eux-mêmes
Grattage Web pour les notifications d'avertissement météo.
Exécutez unittest en Python (pour les débutants)
Python #Hello World pour les super débutants
raclage Web
Python pour les super débutants Super débutants Python # dictionnaire type 2
[Python] Compte-rendu de la réunion d'étude pour les débutants (7/15)
Utiliser DeepL avec python (pour la traduction d'articles)
[Débutant] Scrapage Web Python facile à comprendre à l'aide de Google Colaboratory
Premiers pas avec Python Web Scraping Practice
Mettons ensemble Python pour les super débutants
[Note personnelle] Scraping de pages Web en python3
[Python] Organisation de l'utilisation des instructions
Site de courses de chevaux Web scraping avec Python
Premiers pas avec Python Web Scraping Practice
[Python] Conception d'applications Web pour l'apprentissage automatique
[Python] Lire des images avec OpenCV (pour les débutants)
Comment utiliser "deque" pour les données Python
Création WebApi avec Python (création CRUD) Pour les débutants
Utilisez pathlib dans Maya (Python2.7) en préparation du prochain Python3.7
Pratiquer le web scraping avec Python et Selenium
Scraping Web facile avec Python et Ruby
Ensemble d'entrées standard Atcoder pour les débutants (python)