Ich kenne weder die K-Form der Wolke noch die P-Form von Python. Es ist einen Monat her, seit ich angefangen habe, Python + GCP zu studieren. Begann sich für Web Scraping in Python zu interessieren Verwendung von Anforderungen, verschiedene Attribute des Anforderungsobjekts, Während des Lernens von HTML-Parsing mit BeutifuruSoup Zunächst werde ich das Scraping von Yahoo News in Frage stellen.
(1) Schaffen Sie das Zielmaterial vorerst erfolgreich vor Ort ab. ← Jetzt hier (2) Verknüpfen Sie die Ergebnisse von lokal abgekratzt mit einer Google-Tabelle. (3) cron wird automatisch lokal ausgeführt. (4) Fordern Sie die kostenlose automatische Ausführung auf dem Cloud-Server heraus. (Google Compute Engine) (5) Fordern Sie die kostenlose automatische Ausführung ohne Server in der Cloud heraus. (Vielleicht Cloud-Funktionen + Cloud Scheduler)
・ Erhalten Sie Website-Informationen mithilfe von Anfragen ・ Analysieren Sie HTML mit Beautiful Soup
Eine externe Bibliothek für die HTTP-Kommunikation mit Python. Sie können einfach Informationen auf der Website sammeln. Sie können die URL auch mit urllib abrufen, der Standardbibliothek von Python. Wenn Sie Anforderungen verwenden, ist die Codemenge gering und Sie können sie einfach schreiben. Da es sich jedoch um eine Bibliothek eines Drittanbieters handelt, muss diese installiert werden.
Es kann mit pip installiert werden. Hier ist der saubere Zustand der virtuellen Umgebung, die mit venv erstellt wurde.
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
Mit pip installieren. Überprüfen Sie die Pip-Liste, um festzustellen, ob sie in (und Version) enthalten ist. Daneben sind auch verschiedene Dinge enthalten.
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
Bei Anforderungen handelt es sich um eine allgemeine HTTP-Anforderungsmethode. Es unterstützt Methoden wie get, post, put, delete. Diesmal werden wir get verwenden.
Das von request.get zurückgegebene Antwortobjekt enthält verschiedene Attribute. In diesem Beispielprogramm wurden die folgenden Attribute durch Drucken bestätigt.
Attribut | Was kann bestätigt werden |
---|---|
url | Sie können die URL abrufen, auf die zugegriffen wird. |
status_code | Statuscode(HTTP-Status)Kann erhalten werden. |
headers | Sie können den Antwortheader erhalten. |
encoding | Sie können die von Requests erratene Codierung erhalten. |
Darüber hinaus gibt es Textattribute und Inhaltsattribute.
Das Header-Attribut ist ein Diktat-Typ (Wörterbuch), und Yahoo News enthält viele Schlüssel, wie unten gezeigt. Daher wird im Beispielprogramm der Schlüssel "Inhaltstyp" aus dem Header-Attribut extrahiert und gedruckt.
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 ])'}
Klicken Sie hier, um den Quellauszug von request.get anzuzeigen, und jedes Attribut zeigt einen Teil des erfassten Antwortobjekts an.
python
url = 'https://news.yahoo.co.jp/'
response = requests.get(url)
#print(response.text)
print('url: ',response.url)
print('status-code:',response.status_code) #Normalerweise HTTP-Statuscode[200 OK]
print('headers[Content-Type]:',response.headers['Content-Type']) #Da Header ein Wörterbuch sind, können Sie den Schlüssel zum Inhalt angeben-Typ Ausgabe
print('encoding: ',response.encoding) #Codierung
Hier sind die Ergebnisse.
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 ist eine Bibliothek zum WEB-Scraping von Python. Sie können Daten aus HTML- und XML-Dateien abrufen und analysieren. Es ist einfach, ein bestimmtes HTML-Tag zu extrahieren.
Gleich wie Anfragen. Es kann mit pip installiert werden.
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
In Beautiful Soup ist das zu analysierende Objekt (HTML oder XML) das erste Argument. (Das Antwortobjekt, das durch Anforderungen im Beispiel erhalten wurde) Geben Sie den für die Analyse verwendeten Parser als zweites Argument an.
Parser | Anwendungsbeispiel | Stärken | die Schwäche |
---|---|---|---|
Python’s html.parser | BeautifulSoup(response.text, "html.parser") | Standardbibliothek | Python2-Serie/3.2.Nicht kompatibel mit weniger als 2 |
lxml’s HTML parser | BeautifulSoup(response.text, "lxml") | Explosive Geschwindigkeit | Installation erforderlich |
lxml’s XML parser | BeautifulSoup(response.text, "xml") | Explosive Geschwindigkeit. Nur XML-Parser | Installation erforderlich |
html5lib | BeautifulSoup(response.text, "html5lib") | Kann mit HTML5 richtig umgehen | Installation erforderlich. Sehr langsam. |
python
soup = BeautifulSoup(response.text, "html.parser")
BeautifulSoup hat verschiedene Methoden, aber dieses Mal werden wir die find_all-Methode verwenden. Sie können auch verschiedene Argumente für die find_all-Methode festlegen, diesmal verwenden wir jedoch Schlüsselwortargumente.
Sie können das Tag-Attribut als Schlüsselwortargument angeben und die Informationen des passenden Tags abrufen.
Der Wert des Schlüsselwortarguments kann auch eine Zeichenfolge, ein regulärer Ausdruck, eine Liste, eine Funktion oder ein True-Wert sein. Sie können mehrere Schlüsselwortargumente angeben.
Wenn Sie beispielsweise einen Wert als Schlüsselwortargument an href übergeben, filtert Beautiful Soup das href-Attribut des HTML-Tags.
Zitat: https://ai-inter1.com/beautifulsoup_1/#find_all_detail
Mit anderen Worten, "der Wert des href-Attributs stimmt mit dem angegebenen regulären Ausdruck überein", Indem Sie im folgenden Beispiel_all aus dem Suppenobjekt heraus finden, href属性の中で"news.yahoo.co.jp/pickup"が含まれているもののみ全て抽出することが可能となります。
elems = soup.find_all(href = re.compile("news.yahoo.co.jp/pickup"))
Drehen Sie es am Ende mit einer for-Anweisung, um den extrahierten Nachrichtentitel und den Link auf der Konsole anzuzeigen. Klicken Sie hier für die endgültige Beispielquelle.
requests-test.py
import requests
from bs4 import BeautifulSoup
import re
#Laden Sie Website-Informationen mithilfe von Anfragen herunter
url = 'https://news.yahoo.co.jp/'
response = requests.get(url)
#print(response.text)
print('url: ',response.url)
print('status-code:',response.status_code) #Normalerweise HTTP-Statuscode[200 OK]
print('headers[Content-Type]:',response.headers['Content-Type']) #Da Header ein Wörterbuch sind, können Sie den Schlüssel zum Inhalt angeben-Typ Ausgabe
print('encoding: ',response.encoding) #Codierung
#BeautifulSoup()Website-Informationen und Parser erworben in"html.parser"geben
soup = BeautifulSoup(response.text, "html.parser")
#Im href-Attribut"news.yahoo.co.jp/pickup"Extrahieren Sie nur diejenigen, die enthalten
elems = soup.find_all(href = re.compile("news.yahoo.co.jp/pickup"))
#Der Titel und der Link der extrahierten Nachrichten werden auf der Konsole angezeigt.
for elem in elems:
print(elem.contents[0])
print(elem.attrs['href'])
Der Teil von PGM befindet sich in der Nähe des Pakuri der Site, die ich auf der Referenz-Site gepostet habe. Es war eine großartige Referenz.
Mit Ausnahme des Druck- und Importteils des Antwortobjekts von Bestätigungsanfragen, Sie können Web-Scrape in nur 7 Zeilen. Python und die Bibliothek seines Vorgängers, erschreckend.
Klicken Sie hier für die Ergebnisse. Ich konnte vorerst kratzen! Die letzte Nachricht mit Fotos ist überflüssig, aber ich weiß nicht, was ich tun soll, also lasse ich es so wie es ist. .. ..
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
Docomo Konto Zusammenarbeit Silber Mehrheit Aussetzung
https://news.yahoo.co.jp/pickup/6370639
Herr Suga korrigierte Bemerkungen zu den Selbstverteidigungskräften
https://news.yahoo.co.jp/pickup/6370647
Untergetauchter Erdbeerbauer, der 3 aufeinanderfolgende Jahre leidet
https://news.yahoo.co.jp/pickup/6370631
Zwei Menschen starben, als vier Menschen auf das Meer kamen
https://news.yahoo.co.jp/pickup/6370633
Moulin schießt in Shinji, wieder abstoßend
https://news.yahoo.co.jp/pickup/6370640
Eltern leiden unter Vorurteils-Panikstörung
https://news.yahoo.co.jp/pickup/6370643
Taku Hiraoka Freiheitsstrafe des Angeklagten für 2 Jahre und 6 Monate
https://news.yahoo.co.jp/pickup/6370646
Isetani beschlagnahmte 500 Blatt Geschenkpapier
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
Referenzseite: https://requests-docs-ja.readthedocs.io/en/latest/ https://ai-inter1.com/beautifulsoup_1/ http://kondou.com/BS4/
Recommended Posts