Ein gutes Verständnis des Internets erfordert viel Wissen. Lassen Sie uns eine kurze Einführung in alle Begriffe geben, die Sie benötigen, um Web-Scraping besser zu verstehen.
HTTP oder HyperText Transfer Protocol ist die Grundlage jedes Datenaustauschs im Web. Wie der Name schon sagt, handelt es sich bei HTTP um ein Client-Server-Protokoll. Ein HTTP-Client, wie beispielsweise ein Webbrowser, baut eine Verbindung zu einem HTTP-Server auf und sendet eine Nachricht, etwa: „Hey! Wie geht’s? Könntest du mir bitte diese Bilder schicken?“ Der Server gibt in der Regel eine Antwort in Form von HTML-Code zurück und schließt die Verbindung.
Nehmen wir an, du möchtest Google besuchen. Wenn du die Adresse in den Webbrowser eingibst und die Eingabetaste drückst, sendet der HTTP-Client (der Browser) die folgende Nachricht an den Server:
GET / HTTP/1.1
Host: google.com
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/web\p,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch, br
Connection: keep-aliveUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
Die erste Zeile der Nachricht enthält die Anforderungsmethode (GET), den Pfad, an den wir die Anfrage gesendet haben (in unserem Fall ist das einfach „/“, da wir nur auf www.google.com zugegriffen haben), die Version des HTTP-Protokolls und mehrere Header wie „Connection“ oder „User-Agent“.
Lassen Sie uns über die wichtigsten Header-Felder für diesen Vorgang sprechen:
- Host: Der Domainname des Servers, auf den Sie zugegriffen haben, nachdem Sie die Adresse in den Webbrowser eingegeben und die Eingabetaste gedrückt haben.
- User-Agent: Hier sehen wir Details zum Client, der die Anfrage gestellt hat. Ich verwende ein MacBook, wie Sie am Teil __(Macintosh; Intel Mac OS X 10_11_6)__ erkennen können, und Chrome als Webbrowser __(Chrome/56.0.2924.87)__.
- Accept: Mit diesem Header weist der Client den Server an, ihm nur bestimmte Arten von Antworten zu senden, wie z. B. application/JSON oder text/plain.
- Referrer: Dieses Header-Feld enthält die Adresse der Seite, von der die Anfrage stammt. Websites nutzen diesen Header, um ihre Inhalte je nach Herkunft des Nutzers anzupassen.
Eine Serverantwort kann wie folgt aussehen:
HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu) Content-Type: text/html; charset=utf-8
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
</head>
<body>The content of the document</body>
</html>
Wie Sie sehen können, steht in der ersten Zeile der HTTP-Antwortcode: **200 OK. Das bedeutet, dass das Scraping erfolgreich war.
Hätten wir die Anfrage nun über einen Webbrowser gesendet, hätte dieser den HTML-Code geparst, alle anderen Assets wie CSS-, JavaScript-Dateien und Bilder abgerufen und die endgültige Version der Webseite gerendert. In den folgenden Schritten werden wir versuchen, diesen Prozess zu automatisieren.