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.
(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)
・ 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
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.
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
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.
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 ])'}
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
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.
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
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.
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"))
À 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.
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