Web Scraping für Anfänger in Python (1)

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.

Roadmap zum Erlernen des Web Scraping in Python

(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)

Funktionen des Beispiel-PGM (1)

・ Erhalten Sie Website-Informationen mithilfe von Anfragen ・ Analysieren Sie HTML mit Beautiful Soup

Was sind Anfragen?

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.

Installieren Sie Anforderungen

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

Anforderungsmethode

Bei Anforderungen handelt es sich um eine allgemeine HTTP-Anforderungsmethode. Es unterstützt Methoden wie get, post, put, delete. Diesmal werden wir get verwenden.

Attribute des Antwortobjekts für Anforderungen

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 ])'}

Quelle von request.get Teil

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

Was ist schöne Suppe?

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.

Installation von beautifulsoup4

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

Schöne Suppenargumente

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.

find_all: Schlüsselwortargument

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"))

Letzte Probenquelle

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.

Nachwort

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

Web Scraping für Anfänger in Python (1)
Web Scraping für Anfänger in Python (4) -1
Web Scraping für Anfänger in Python (1) Verbesserte Version
Web-Scraping für Anfänger mit Python (4) --2 Scraping auf Cloud Shell
[Für Anfänger] Versuchen Sie Web Scraping mit Python
Web-Scraping durch Anfänger mit Python (4) -3 GCE VM-Instanzerstellung und Scraping auf VM
WEB-Scraping mit Python (für persönliche Notizen)
Python Lehrbuch für Anfänger
OpenCV für Python-Anfänger
Web Scraping mit Python + JupyterLab
Lernablauf für Python-Anfänger
Python3-Umgebungskonstruktion (für Anfänger)
Python #Funktion 2 für Super-Anfänger
Grundlegende Python-Grammatik für Anfänger
100 Pandas klopfen für Python-Anfänger
Python #Funktion 1 für Super-Anfänger
[Python + Selen] Tipps zum Scraping
Python #Liste für Super-Anfänger
Web Scraping Anfänger mit Python
~ Tipps für Python-Anfänger mit Liebe von Pythonista ③ ~
[Für Anfänger] Wie man den Befehl say mit Python benutzt!
Datenanalyse zur Verbesserung von POG 1 ~ Web Scraping mit Python ~
Python-Anfänger bleiben beim ersten Web-Scraping stecken
Tipps für Python-Anfänger, um das Scikit-Image-Beispiel für sich selbst zu verwenden 4 Verwenden Sie die GUI
Web-Lehrmaterialien zum Erlernen von Python
Python für Super-Anfänger Super-Anfänger Python # Wörterbuch Typ 1
Web Scraping mit Python Erster Schritt
Ich habe versucht, WebScraping mit Python.
Was ist Schaben? [Zusammenfassung für Anfänger]
Verwenden Sie als nächstes Python (Flask) für Heroku!
[Scraping] Python-Scraping
<Für Anfänger> Python-Bibliothek <Für maschinelles Lernen>
Python #len Funktion für Super-Anfänger
[Für Anfänger] Web-Scraping mit Python "Greifen Sie auf die URL auf der Seite zu, um den Inhalt abzurufen."
Tipps für Python-Anfänger, um das Scikit-Image-Beispiel für sich selbst zu verwenden
Web Scraping für Wetterwarnbenachrichtigungen.
Führen Sie unittest in Python aus (für Anfänger)
Python #Hello World für Super-Anfänger
Web Scraping
Python für Super-Anfänger Super-Anfänger Python # Wörterbuch Typ 2
[Python] Protokoll des Studientreffens für Anfänger (7/15)
Verwenden Sie DeepL mit Python (für die Artikelübersetzung)
[Anfänger] Leicht verständliches Python-Web-Scraping mit Google Colaboratory
Erste Schritte mit Python Web Scraping Practice
Lassen Sie uns Python für Super-Anfänger zusammenstellen
[Persönlicher Hinweis] Scraping von Webseiten in Python3
[Python] Organisieren der Verwendung für Anweisungen
Pferderennseite Web Scraping mit Python
Erste Schritte mit Python Web Scraping Practice
[Python] Webanwendungsdesign für maschinelles Lernen
[Python] Bilder mit OpenCV lesen (für Anfänger)
Verwendung von "deque" für Python-Daten
WebApi-Erstellung mit Python (CRUD-Erstellung) Für Anfänger
Verwenden Sie pathlib in Maya (Python2.7), um sich auf das kommende Python3.7 vorzubereiten
Üben des Web-Scrapings mit Python und Selen
Einfaches Web-Scraping mit Python und Ruby
Atcoder-Standardeingabesatz für Anfänger (Python)