Stop guessing what′s working and start seeing it for yourself.
Acceder o registrarse
Q&A
Question Center →

Ein Tutorial von Semalt: Web Scraping in Python

Ich habe kürzlich KinoPoisk (russische Version von IMDB) besucht und festgestellt, dass über die Jahren konnte ich über 1000 Filme bewerten. Ich dachte, dass es interessant wäre, diese Daten genauer zu untersuchen: Hat sich mein Filmgeschmack im Laufe der Zeit verändert? In welchen Jahreszeiten sehe ich mir mehr Filme an?

Bevor wir jedoch schöne Grafiken analysieren und erstellen, müssen wir die Daten beschaffen. Leider haben viele Dienste keine öffentliche API, also müssen Sie die Ärmel hochkrempeln und die HTML-Seiten analysieren.

Dieser Artikel richtet sich an diejenigen, die schon immer wissen wollten, wie man Web Scrapping nutzt, aber nicht in die Finger bekommen hat oder nicht wusste, wo sie anfangen sollen.

Aufgabe

Unsere Aufgabe besteht darin, die Daten über bereits gesehene Filme zu extrahieren: den Titel des Films, das Datum und die Uhrzeit des Ansehens, die Bewertung des Benutzers.

Unsere Arbeit wird in zwei Schritten durchgeführt:

Stufe 1: HTML-Seiten herunterladen und speichern

Stufe 2: html in einem für weitere Analyse (csv, json, pandas dataframe etc.)

Instrumente

Es gibt viele Python-Bibliotheken zum Senden von http-Anfragen. Der bekannteste und sehr praktische ist Anfragen.

Es ist auch notwendig, eine Bibliothek für das HTML-Parsing zu wählen.

BeatifulSoup, lxml

Dies sind die beiden beliebtesten Bibliotheken für die Analyse von HTML und die Auswahl einer davon ist nur eine persönliche Vorliebe. Darüber hinaus sind diese Bibliotheken eng miteinander verbunden: BeautifulSoup hat begonnen, lxml als internen Parser für die Beschleunigung zu verwenden, und in lxml wurde ein Soupparser-Modul hinzugefügt. Um die Ansätze zu vergleichen, werde ich die Daten mit BeautifulSoup analysieren und XPath-Selektoren im Modul lxml.html verwenden.

Herunterladen von Daten

Beginnen wir mit dem Herunterladen von Daten. Versuchen wir zunächst, die Seite per URL zu erhalten und in einer lokalen Datei zu speichern.

Wir öffnen die resultierende Datei und sehen, dass es nicht so einfach ist: Die Site betrachtet uns als Roboter und zeigt die Daten nicht an.

Lasst uns herausfinden, wie die Seite funktioniert

Der Browser hat kein Problem damit, Informationen von der Seite zu erhalten. Mal sehen, wie genau die Anfrage gesendet wird. Dazu verwenden wir das "Network" Panel in den "Developer Tools" im Browser (ich benutze Firebug dafür), normalerweise ist die Anfrage die längste.

Wie wir sehen können, sendet der Browser auch Header UserAgent, Cookie und eine andere Anzahl von Parametern. Zuerst werden wir versuchen, den richtigen UserAgent an einen Header zu senden.

Dieses Mal sind wir erfolgreich, und jetzt erhalten wir die notwendigen Daten. Es ist erwähnenswert, dass die Site manchmal auch die Gültigkeit von Cookies prüft. In diesem Fall helfen die Sitzungen in der Requests-Bibliothek.

Alle Preise herunterladen

Jetzt können wir eine Seite mit Raten speichern. Aber normalerweise hat der Benutzer viele Raten, und es ist notwendig, alle Seiten zu durchlaufen. Die Seitenzahl, die uns interessiert, kann einfach direkt in die URL übernommen werden.

Daten von Html sammeln

Kommen wir nun direkt zu den Daten aus HTML. Der einfachste Weg zu verstehen, wie die HTML-Seite strukturiert ist, ist die Verwendung der Funktion "Element prüfen" im Browser. In diesem Fall ist alles ganz einfach: Die gesamte Tabelle mit Raten befindet sich im Tag. Wähle diesen Knoten:

von bs4 import BeautifulSoup

von lxml import html

# Schöne Suppe

suppe = BeautifulSoup (Text)

film_list = soup.find ('div', ('class': 'profileFilmsList'))

# lxml

tree = html.fromstring (Text)

film_list_lxml = tree.xpath ('// div [@class =' 'profileFilmList' ']') 

Lerne, wie man den russischen Titel des Films und einen Link herauszieht zur Seite des Films (auch wie man den Text und den Wert des Attributs erhält).

Wenn Sie Titel in Englisch extrahieren müssen, ändern Sie einfach "nameRus" in "nameEng".

Ergebnisse

Wir haben gelernt, Webseiten zu parsen, Bibliotheken mit Requests, BeautifulSoup und lxml kennenzulernen sowie Daten zu erhalten, die für die weitere Analyse bereits gesehener Filme auf KinoPoisk geeignet sind.

View more on these topics

Post a comment

Post Your Comment

Skype

semaltcompany

WhatsApp

16468937756

Telegram

Semaltsupport