Python: Scraping Teil 1

Was ist Schaben?

Über das Schaben

Sie lernen Grundkenntnisse wie Begriffe, die Sie beim Scraping kennen müssen, und die Struktur von Webseiten.

Beim Scraping werden die erforderlichen Informationen automatisch von einer Webseite extrahiert.

Die "Informationen", auf die hier Bezug genommen wird, sind verschieden, wie z. B. Text, Bilder und Links. Sie können sich das manuelle Öffnen des Browsers und das Sammeln von Informationen ersparen und eine große Datenmenge sammeln.

Schaben wird in einer Vielzahl von Situationen eingesetzt, vom persönlichen Gebrauch bis zur Arbeit und Forschung.

Im Bereich des maschinellen Lernens ist eine große Datenmenge im Web besonders nützlich für die Verarbeitung natürlicher Sprache und die Bilderkennung.
In den letzten Jahren haben offene Daten (Daten, die von der Regierung, lokalen Regierungen, Unternehmen usw. mit Genehmigung zur freien Nutzung veröffentlicht wurden) Aufmerksamkeit erregt.
Scraping ist auch nützlich, wenn solche Daten gesammelt werden.

Wenn das Scraping jedoch missbraucht wird, wird der Server, auf dem die Webseite angezeigt wird, belastet. Seien Sie vorsichtig, wenn Sie es verwenden.

Im Gegensatz zur API stellt der Dienstanbieter sie Entwicklern nicht zur Verfügung. Wenn Sie dies ohne die Erlaubnis der anderen Partei tun, können Sie gegen die Bestimmungen der Website verstoßen.

In einigen Fällen ist die Weitergabe erfasster Daten untersagt. Einige Websites verbieten daher das Scraping Bitte lesen Sie die Nutzungsbedingungen der Website sorgfältig durch, bevor Sie mit dem Scraping beginnen.

Kratzfluss

Überprüfen Sie den allgemeinen Kratzfluss. Es wird auch als gemeinsames Schaben bezeichnet.

Die Begriffe Kriechen und Schaben werden auch für jeden Schritt verwendet.

1, erfüllen Sie die Bestätigungspunkte

Gibt es eine API, die die gewünschten Informationen erhalten kann, oder ist es in Ordnung, die erfassten Daten zu veröffentlichen? Überprüfen Sie, ob eine Verletzung wie das Urheberrecht vorliegt.

2, Webseitenerfassung (Crawlen)

Um nur beliebige Informationen von einer Webseite abzurufen, müssen Sie zuerst die Webseite abrufen.

Diese Arbeit wird auch als Crawlen bezeichnet.

Für häufig verwendete Bibliotheken

urllib, Anfragen usw.

3, Erfassung von Daten von der Webseite

Sobald Sie eine Webseite haben, erhalten Sie die Informationen, die Sie benötigen.

Es gibt verschiedene Bibliotheken wie re, lxml und Beautiful Soup.

Um genau zu sein, wird dieser Prozess als Schaben bezeichnet.

4, Datenspeicherung

Die durch Scraping erfassten Daten werden in der Datenbank oder lokal (auf Ihrem eigenen PC) gespeichert.

Die Hauptmethode des Schabens

Hier sind drei einfache Möglichkeiten zum Schaben.

1, wget Befehl

Als eine der einfachsten Kratzmethoden Laden Sie die Webseite mit dem Befehl wget herunter Es gibt eine Methode zur Textverarbeitung mit dem Unix-Befehl oder regulären Ausdrücken.

Diese Methode kann einfach über die Befehlszeile ausgeführt werden Es ist sehr einfach, da es nur mit den Grundkenntnissen des Unix-Befehls verarbeitet werden kann.

Andererseits mangelt es, weil es einfach ist, auch an praktischen Funktionen. Es hat auch den Nachteil, dass es für komplexe Daten schwierig zu verarbeiten ist. Dies ist beispielsweise beim Abrufen eines formatierten Datasets hilfreich.

$ wget http://scraping.aidemy.net

2, Web Scraping Tool

Mitgelieferte Software, Google Chrome-Erweiterungen, Google-Tabellen usw. Es gibt verschiedene Werkzeuge.

Es hat den Vorteil, dass es einfach zu bedienen ist und fast keinen Code zum Schreiben enthält. Es gibt auch Nachteile wie eingeschränkte Funktionen, unterschiedliche Verwendung und kann aufgeladen werden.

Programmierung

Sie können Scraping in verschiedenen Programmiersprachen durchführen.

Dies ist zwar praktisch, da es komplexe und dynamische Daten verarbeiten kann Sie müssen die Grammatik und die Verarbeitungsmethoden verstehen.

Python kann nur mit Standardbibliotheken gekratzt werden

Leistungsstärkere Bibliotheken von Drittanbietern (Bibliotheken, die von Benutzern auf der ganzen Welt außer Standardbibliotheken veröffentlicht werden) Existiert.

Mit solchen Werkzeugen können Sie mit einem relativ kurzen Programm schnell kratzen.

Insbesondere, weil Python für die Vorverarbeitung wie Datenanalyse und maschinelles Lernen nützlich ist. Man kann sagen, dass es eine hohe Affinität zur Nachkratzverarbeitung und -visualisierung hat.

Über HTML

Was ist HTML?

Was ist HTML?

Abkürzung für Hyper Text Markup Language

Es ist eine der grundlegendsten Auszeichnungssprachen zum Erstellen von Webseiten.

Was ist HTML (Hyper Text Markup Language)? Wie der Name schon sagt, handelt es sich um eine leistungsstarke Text- und Auszeichnungssprache.

Eine Auszeichnungssprache ist eine Sprache zur Beschreibung der visuellen Struktur eines Satzes.
Es ist hauptsächlich eine Sprache, um das Lesen von Webseiten zu erleichtern.

Wie das Wort "Markup" bedeutet, wird eine Markierung (Tag) angebracht und die Größe und Position von Zeichen, Bildlinks usw. werden eingebettet.

Markup-Sprachen umfassen XML sowie HTML.

XML verfügt über eine Struktur, die für den Datenaustausch zwischen mehreren Anwendungen über das Internet geeignet ist.

Codierungsmethode

Codierung ist die Codierung von analogen Signalen und digitalen Daten unter Verwendung einer bestimmten Methode. Dies ist eine der Möglichkeiten, die Daten nach bestimmten Regeln in einem anderen Format zu formatieren.

Der Computer verarbeitet numerisch. Zeigen Sie einfach mit Buchstaben und Symbolen an, damit Menschen leicht verstehen können Tatsächlich gibt es Zahlen (Bitfolgen), die allen Zeichen und Symbolen entsprechen.

Die Methode zum Bestimmen, welches Zeichen welcher Bitfolge zugewiesen ist, wird als Zeichencode bezeichnet.

Beispielsweise gibt es Zeichencodes mit den Namen UTF-8 und Shift-JIS.

Das japanische "a" ist "0xe38182" in der UTF-8-Zeichencodetabelle Es ist "0x81a0" in der Shift-JIS-Zeichencodetabelle.

Dekodieren

Decodierung ist die Rückkehr codierter Daten in ihr ursprüngliches Format.

Dies wird als Entschlüsselung bezeichnet.

Zum Beispiel bedeutet das Dekodieren von Video, dass die auf der DVD aufgezeichneten digitalen Daten in das Originalvideo konvertiert werden. Wenn Sie nicht wie beim Codieren dekodieren, werden die Textdaten verstümmelt.

Beispielsweise ist in UTF-8 eine Datei wie folgt geschrieben.

Ich heiße Taro Yamada.

Wenn Sie diese Datei mit Shift-JIS dekodieren, was sich von der Codierung unterscheidet, ist dies wie folgt.

聘 √.

Grundsätzlich erkennt und decodiert der Webbrowser den Zeichencode automatisch. Benutzer können normalerweise surfen, ohne sich dieser Dinge bewusst zu sein.

Holen Sie sich eine Webseite

Eine Webseite mit urllib erhalten

Verwenden Sie Python, um Schritt für Schritt Webseiten abzurufen (zu crawlen).

Um eine Webseite zu erhalten, in der Standardbibliothek

urllib.Verwenden des Anforderungsmoduls

Geben Sie die URL im Argument der in diesem Modul enthaltenen urlopen-Methode an. urlopen () gibt ein Objekt vom Typ HTTPResponse zurück.

from urllib.request import urlopen

#Geben Sie als Beispiel die URL der Google-Startseite an
f = urlopen("https://www.google.co.jp")

# `urlopen()`Gibt ein Objekt vom Typ HTTPResponse zurück
print(type(f))
# >>>Ausgabeergebnis
<class 'http.client.HTTPResponse'>

Verweisen auf die abgerufene Webseite

Verwenden Sie die Lesemethode.

Die Daten werden jedoch immer noch codiert (nicht decodiert), indem sie einfach mit der Lesemethode gelesen werden. Es ist zu beachten, dass der Datentyp ein Bytetyp ist.

from urllib.request import urlopen

#Geben Sie als Beispiel die URL der Google-Startseite an
f = urlopen("https://www.google.co.jp")

# `urlopen()`Der Textkörper von HTML erhalten in`read()`Siehe in
read = f.read()

print(type(read))
print(read)
>>>Ausgabeergebnis
# `read()`Der Datentyp ist der Bytetyp
<class 'bytes'>

# `read()`Dies ist der Inhalt des HTML-Codes, auf den in verwiesen wird
b'<!doctype html><html itemscope=.....Folgendes wird weggelassen

Wie das obige Beispiel

read()Wenn Sie nicht die Anzahl der Zeichen angeben, die als Argument gelesen werden sollen
Holen Sie sich alle Elemente einer Webseite
read(Wortzahl)Und das Argument
Ruft die angegebene Anzahl von Zeichen von Anfang an ab.

Rufen Sie den Zeichencode aus dem HTTP-Header ab

Im vorherigen Abschnitt gibt die urlopen-Methode ein Objekt vom Typ HTTPResponse zurück. Ich habe bestätigt, dass die Antwort, die durch die Lesemethode dieses Objekts erhalten wird, vom Bytetyp ist.

Der Grund, warum der Datentyp dieser Antwort der Bytetyp ist Dies lag daran, dass die geladene Webseite nicht mit den codierten Rohdaten dekodiert wurde.

Um die erfasste Antwort als str-Typ zu behandeln Sie müssen den richtigen Zeichencode für die Dekodierung angeben.

Um den auf einer Webseite verwendeten Zeichencode herauszufinden
Vom HTTPResponse-Typobjekt, das von der urlopen-Methode erhalten wurde
Content-Navigieren Sie zum Typ-Header.
Content-Verweisen auf den Type-Header
Verwenden Sie die getheader-Methode
Inhalt als Argument-Geben Sie den Typ an.
from urllib.request import urlopen

#Geben Sie als Beispiel die URL der Google-Startseite an
f = urlopen("https://www.google.co.jp")

#HTTP-Header`Content-Type`Holen Sie sich den Wert von
f.getheader("Content-Type")
# >>>Ausgabeergebnis
'text/html; charset=Shift_JIS'

Der Wert des Content-Type-Headers wird als 'text / html; charset = Shift_JIS' zurückgegeben.

Dieser Zeichensatz = ist der Zeichencode der Webseite.

Der Zeichencode des Beispiels google.co.jp lautet Shift_JIS.

Wenn Zeichensatz=Wenn nicht festgelegt, werden die meisten japanischen Webseiten
UTF-Sie können es sich als 8 vorstellen.

Verwenden Sie den obigen regulären Ausdruck, um den Zeichencode zu erhalten Sie können es auch aus dem Wert des Content-Type-Headers abrufen.

Kombinieren Sie praktisch info () und get_content_charset (), um Folgendes zu erhalten.

Die info-Methode gibt ein Objekt vom Typ HTTPMessage zurück.
Holen Sie sich von diesem Objekt_content_Holen Sie sich den Zeichensatz mit der Zeichensatzmethode.
from urllib.request import urlopen

#Geben Sie als Beispiel die URL der Google-Startseite an
f = urlopen("https://www.google.co.jp")

# info()damit`HTTPMessage-Typ`Objekt abrufen
# get_content_charset()damit`charset`Erhalten
#Vom Argument`failobj=`Gibt die Codierung an, wenn kein Zeichensatz angegeben ist
encoding = f.info().get_content_charset(failobj="utf-8")

print(encoding)
# >>>Ausgabeergebnis
shift_jis

Holen Sie sich den HTML-Code

Da habe ich den Zeichencode der Webseite bekommen Als nächstes wird der HTML-Body mit dem richtigen Zeichencode dekodiert.

Decode verwendet die Decode-Methode
Geben Sie die Codierung im Argument an.
from urllib.request import urlopen

#Geben Sie als Beispiel die URL der Google-Startseite an
f = urlopen("https://www.google.co.jp")

#Zeichensatz abrufen
encoding = f.info().get_content_charset(failobj="utf-8")

# decode()Holen Sie sich HTML, indem Sie die Codierung in angeben
text = f.read().decode(encoding)

print(text)
# >>>Ausgabeergebnis
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en"><head>.....Folgendes wird weggelassen

Holen Sie sich einfach eine Webseite

Bisher haben wir urllib verwendet, um die Elemente der Webseite abzurufen. Keine Standardbibliothek hier Holen Sie sich Webseiten einfacher als urllib

Einführung in das Anforderungsmodul.

urllib ist einfach zu bedienen, wenn Sie nur Post haben und Anfragen erhalten Wenn Sie etwas Kniffliges tun möchten, z. B. einen HTTP-Header oder eine Basisauthentifizierung hinzufügen (normalerweise Kennwortauthentifizierung) Eine etwas mühsame Vorverarbeitung ist erforderlich.

Das Anforderungsmodul verarbeitet automatisch die Zeichencode-Dekodierung sowie die Komprimierung von Dateien und Ordnern. Sie können mit einer einfachen Beschreibung in einer höheren Ebene arbeiten.

#Importieren Sie das Repuests-Modul
import requests

# `requests.get()`Ruft das Antwortobjekt für die in angegebene URL ab
r = requests.get("https://www.google.co.jp")

#Sie können den Zeichencode vom Antwortobjekt mit dem Codierungsattribut abrufen
print(r.encoding)
>>>Ausgabeergebnis
Shift_JIS
#Sie können die Antwort automatisch mit dem Textattribut in den Typ str dekodieren lassen.
print(r.text)
>>>Ausgabeergebnis
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en"><head>.....Folgendes wird weggelassen

Recommended Posts

Python: Scraping Teil 1
Python: Scraping Teil 2
[Scraping] Python-Scraping
Schaben mit Selen + Python Teil 1
Schaben mit Selen + Python Teil 2
Python-Scraping-Memo
Python Scraping get_ranker_categories
Scraping mit Python
Scraping mit Python
QGIS + Python Teil 1
Python Scraping eBay
Python Scraping get_title
Scraping mit Python
Lösung Wenn Sie Python 3.6 oder höher verwenden, benötigen Sie die enum34-Bibliothek ebenfalls nicht. Deinstallieren Sie sie daher und verwenden Sie das Standard-Enum-Modul. Enum34 deinstallieren Führen Sie nach der Deinstallation von enum34 erneut `pip install optuna` aus und Sie haben Optuna erfolgreich installiert! Python, pip, Python3, enum, OptunaPython3 Beginn Teil 1
Automatisieren Sie einfache Aufgaben mit Python Part1 Scraping
[Teil1] Scraping mit Python → Organisieren Sie bis zu CSV!
Scraping in Python (Vorbereitung)
Versuchen Sie es mit Python.
UnicodeEncodeError: 'cp932' während des Python-Scrapings
Scraping mit Python + PhantomJS
Python Basic Memorandum Teil 2
Python-Grundnotiz - Teil 2
Schaben mit Selen [Python]
Scraping mit Python + PyQuery
Python-Grundnotiz - Teil 1
Scraping von RSS mit Python
Scraping mit Python 3.5 async / await
Bildverarbeitung mit Python (Teil 2)
Ich habe versucht, mit Python zu kratzen
Python mit freeCodeCamp Teil1 studieren
Angrenzende Bilder mit Python Teil 1
Python-Anwendung: Pandas Teil 1: Basic
Python-Anwendung: Pandas Teil 2: Serie
Web Scraping mit Python + JupyterLab
Schaben mit Selen in Python
Python: Schiffsüberlebensvorhersage Teil 2
[Python] Scraping in AWS Lambda
Python Super Anfänger versucht zu kratzen
Python
Schaben mit Chromedriver in Python
Python: Überwachtes Lernen: Hyperparameter Teil 1
Scraping mit Python 3.5 Async-Syntax
Python-Grammatik-Grundnotiz (1)
Scraping mit Selen in Python
Python: Schiffsüberlebensvorhersage Teil 1
Python studieren mit freeCodeCamp part2
Bildverarbeitung mit Python (Teil 1)
Nampre mit Python lösen (Teil 2)
Web Scraping mit Selenium (Python)
Bildverarbeitung mit Python (3)
Python: Schiffsüberlebensvorhersage Teil 3
Python: Aktienkursprognose Teil 2
UI-Automatisierung Teil 2 in Python
Kratzwettervorhersage mit Python
Python: Überwachtes Lernen: Hyperparameter Teil 2
[Python + Selen] Tipps zum Scraping
Ich habe versucht, mit Python zu kratzen
Web Scraping Anfänger mit Python