HTTP-Header für Web Scraping

Erfahren Sie mehr über die gängigsten HTTP-Header, warum sie für Web Scraping wichtig sind und wie Sie sie optimieren können.
12 min read
HTTP Headers for Web Scraping

Der Kontext, sei es ein kultureller, ein umweltbezogener oder ein beziehungsbezogener, ist in jeder Kommunikation vorhanden, und der Kontext beeinflusst die Wirksamkeit der Kommunikation. In der Webkommunikation sind HTTP-Header der technische Kontext, den Webserver und Clients beim Senden von HTTP-Anfragen und Empfangen von HTTP-Antworten austauschen. Dieser Kontext kann verwendet werden, um die Authentifizierung zu erleichtern, das Caching-Verhalten zu bestimmen oder den Sitzungsstatus zu verwalten. Außerdem hilft er Webservern dabei, den Ursprung der HTTP-Anfrage zu bestimmen und darauf zu antworten. Diese Antwort kann das Rendering einer Website umfassen, um den Anforderungen Ihres Client-Geräts zu entsprechen, oder die Übermittlung von Daten an Sie. Wenn letzteres mithilfe eines Bots geschieht, wird der Vorgang als Web Scraping bezeichnet, was nützlich ist, wenn Sie automatisch Daten von einer Website erhalten müssen.

Bei der Erstellung eines Scrapers kann es leicht passieren, dass Sie die Konfiguration Ihrer HTTP-Header übersehen, da die Standardwerte die Ausführung Ihrer Anfragen ermöglichen. Ohne richtig konfigurierte HTTP-Header ist es jedoch schwierig, eine kontinuierliche Kommunikation zwischen Ihrem Scraper und dem Webserver aufrechtzuerhalten. Dies liegt daran, dass Webserver so eingerichtet werden können, dass sie Bots und automatisierte Skripte anhand von Informationen in Standard-HTTP-Headern wie User-AgentRefererund Accept-Languageerkennen.

Wenn Sie Ihre Header jedoch richtig konfigurieren, können Sie den normalen Benutzer-Traffic simulieren und so die Zuverlässigkeit Ihrer Scraping-Tätigkeiten erhöhen. In diesem Artikel erfahren Sie alles über HTTP-Header, ihre Rolle beim Web Scraping und wie Sie sie für eine effektive Datenerfassung optimieren können.

Warum Sie HTTP-Header benötigen

HTTP-Header sind Schlüssel-Wert-Paare in Anfragen und Antworten, die für die Webkommunikation erforderlich sind. Der Webserver erhält über Anfrage-Header Informationen und Anweisungen über den Client und die Ressource von Interesse. In der Zwischenzeit geben die Antwort-Header dem Client weitere Informationen über die abgerufene Ressource und die erhaltene Antwort. Obwohl es zahlreiche HTTP-Header gibt, sind die folgenden einige der wichtigsten für Web Scraping:

User-Agent

User-Agent ist eine Zeichenfolge, die den Client, den Sie zum Senden einer Anfrage verwenden, eindeutig identifiziert. Der Inhalt dieser Zeichenfolge kann die Art der Anwendung, das Betriebssystem, die Softwareversion und den Softwarehersteller enthalten.

Standardmäßig ist dieser Header auf einen Wert gesetzt, mit dem Ihr Scraper leicht als Bot identifiziert werden kann. Wenn Sie beispielsweise mit einem Python-Anfrageskript Preisdaten von einer E-Commerce-Website abrufen möchten, sendet Ihr Scraper einen User-Agent ähnlich dem folgenden in seinem HTTP-Header:

"python-requests/X.X.X"

Sie können verhindern, dass Sie entdeckt werden, indem Sie den User-Agent so ändern, dass er verschiedene Browser und Geräte imitiert. Dazu müssen Sie den Python-Anfragen-User-Agent-Header durch den folgenden ersetzen:

    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36"

Dieser neue Header enthält Informationen über den Browser und die native Plattform, auf der er ausgeführt wird.

Accept-Language

Mit dem Accept-Language-Header können Sie angeben, in welcher(n) Sprache(n) Sie die angeforderte Ressource erhalten möchten. Falls erforderlich, können Sie auch den Ländercode oder den Alphabet-Typ angeben. Wenn Sie beispielsweise Accept-Language auf „en-US“setzen, bedeutet dies, dass Sie erwarten, dass die Ressource in der englischen Sprache, wie sie in den Vereinigten Staaten von Amerika gesprochen wird, vorliegt, auch wenn Sie sich auf einem anderen Kontinent befinden. Sie können den Alphabet-Typ auch verwenden, um den Header als Version der lateinischen Schrift der serbischen Sprache zu definieren, indem Sie „sr-Latn“ angeben. Dadurch wird sichergestellt, dass Sie die entsprechenden lokalisierten Daten abrufen.

Wenn es mehrere Sprachen gibt, wird der Accept-Language-Header zu einer durch Komma getrennten Liste von Sprachen mit Qualitätswerten, die die Prioritätsreihenfolge festlegen. Ein Beispiel hierfür ist „en -GB;q=1.0, en-US;q=0.9, fr;q=0.8", wobei höhere Werte von q eine höhere Priorität bedeuten und q von 0 bis 1 reicht.

Cookie

Der Cookie -Header enthält Daten, mit denen der Webserver eine Benutzersitzung über mehrere Anfrage-Antwort-Zyklen hinweg identifizieren kann. Beim Scraping können Sie auf der Client-Seite Cookies erzeugen (oder zuvor gespeicherte verwenden) und sie in den HTTP-Header einer neuen Anfrage aufnehmen. Dadurch kann der Webserver Ihre Anfrage einer gültigen Benutzersitzung zuordnen und die benötigten Daten zurückgeben. Wenn Sie beispielsweise mehrere Anfragen stellen müssen, um benutzerspezifische Daten von einer E-Commerce-Website zu erhalten, sollten Sie Sitzungscookies in den HTTP-Anfage-Cookie-Header  aufnehmen, damit Ihr Scraper eingeloggt bleibt, relevante Daten speichert und Cookie-basierte Bot-Erkennungssysteme vermeidet.

Der Cookie-Header besteht aus einer Liste von einem oder mehreren Schlüssel-Wert-Paaren, die durch ein Semikolon und ein Leerzeichen getrennt sind („;"). Er hat normalerweise die Form „name0=value0; name1=value1; name2=value2".

Referer

Referer enthält die absolute oder teilweise URL der Seite, von der aus Sie die Ressource angefordert haben. Wenn Sie beispielsweise durch die Startseite einer E-Commerce-Website scrollen, können Sie auf einen Link klicken, der Ihr Interesse weckt. Der  Referer-Header in der HTTP-Anfrage, die die nächste Webseite öffnet, verweist auf die Startseite der E-Commerce-Website, von der aus Sie die Anfrage initiiert haben. Wenn Sie von der aktuellen Webseite zu anderen Webseiten navigieren, dient jede zuvor besuchte Seite als Referer für die nächste. Dies entspricht der Funktionsweise von Verweisen (Referrals) in menschlichen Interaktionen.

Natürlich überprüfen einige Websites diesen Header als Teil ihres Anti-Scraping-Mechanismus. Das heißt, wenn Sie den natürlichen Traffic von anderen Websites simulieren und eine Blockierung vermeiden möchten, müssen Sie den Referer-Header auf eine gültige URL setzen, z. B. die Homepage der Website oder die URL einer Suchmaschine.

So optimieren Sie HTTP-Header für Web Scraping

Denken Sie beim Scraping daran, dass die Daten, die Sie benötigen, für die Eigentümer wertvoll sind und sie möglicherweise zögern, sie weiterzugeben. Daher ergreifen viele Eigentümer Maßnahmen, um automatische Agents zu erkennen, die versuchen, auf ihre Inhalte zuzugreifen. Wenn sie Erfolg haben, können sie Sie blockieren oder irrelevante Daten zurückgeben.

HTTP-Header helfen Ihnen dabei, diese Sicherheitsmaßnahmen zu umgehen, indem Sie den Anschein erwecken, dass Ihr Scraper ein normaler Internetnutzer ist, der die Website besucht. Indem Sie Header wie User-AgentAcceptAccept-Language und Referer richtig festlegen, können Sie den normalen Web-Traffic effektiv imitieren und es dem Webserver gleichzeitig erschweren, Ihren Bot als Scraper zu identifizieren.

Benutzerdefinierte Header abrufen und festlegen

Um zu demonstrieren, wie Sie Ihre HTTP-Header optimieren können, stellen wir eine Python-Anfrage, um Bücher in der Kategorie „Mystery“ von der Dummy-E-Commerce-Website Books to Scrape zu scrapen. Bevor Sie dies tun, müssen Sie HTTP-Header aus den Entwicklertools Ihres Browsers abrufen.

Besuchen Sie die Website zunächst auf einer anderen Browser-Registerkarte:

Starten Sie dann die Entwicklertools in Ihrem Browser. Eine Möglichkeit, dies zu erreichen, besteht darin, mit der rechten Maustaste auf eine beliebige Stelle auf der Seite zu klicken und Inspect auszuwählen oder die Tool-Unterliste zu überprüfen. Klicken Sie dann im oberen Menü der Entwicklertools auf die Registerkarte Network :

Wenn die Registerkarte Network geöffnet ist, markieren Sie das Kästchen neben Cachedeaktivieren. Dadurch können Sie den gesamten Anfrage-Header sehen. Klicken Sie dann in der Liste der Kategorien auf der Website auf den Link zur Kategorie Mystery. Dadurch wird eine Seite mit Büchern in dieser Kategorie geöffnet, aber was noch wichtiger ist, in der Registerkarte Network des Entwickler-Tools-Fensters wird eine Liste von Anfragen angezeigt:

Scrollen Sie zum Anfang der Liste und klicken Sie auf das erste Element. Dadurch wird ein kleineres Fenster in den Entwicklertools geöffnet. Scrollen Sie zu den Anfrage-Headern:

Unter Anfrage-Header finden Sie die HTTP-Anfrage-Header, insbesondere die, von denen Sie gerade erfahren haben. Um diese Header mit einem Scraper zu verwenden, erstellen Sie ein Python-Skript mit Variablen für die Header User-AgentAcceptAccept-LanguageCookieund Referer:

import requests

referer = "https://books.toscrape.com/"
accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8"
accept_language = "en-GB,en;q=0.6"
cookie = "zero-chakra-ui-color-mode=light-zero; AMP_MKTG_8f1ede8e9c=JTdCJTIycmVmZXJyZXIlMjIlM0ElMjJodHRwcyUzQSUyRiUyRnd3dy5nb29nbGUuY29tJTJGJTIyJTJDJTIycmVmZXJyaW5nX2RvbWFpbiUyMiUzQSUyMnd3dy5nb29nbGUuY29tJTIyJTdE; AMP_8f1ede8e9c=JTdCJTIyZGV2aWNlSWQlMjIlM0ElMjI1MjgxOGYyNC05ZGQ3LTQ5OTAtYjcxMC01NTY0NzliMzAwZmYlMjIlMkMlMjJzZXNzaW9uSWQlMjIlM0ExNzA4MzgxNTQ4ODQzJTJDJTIyb3B0T3V0JTIyJTNBZmFsc2UlMkMlMjJsYXN0RXZlbnRUaW1lJTIyJTNBMTcwODM4MjE1NTQ2MCUyQyUyMmxhc3RFdmVudElkJTIyJTNBNiU3RA=="
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36"

custom_headers = {
    "User-Agent": user_agent,
    "Accept": accept,
    "Accept-Language": accept_language,
    "Cookie": cookie,
    "Referer": referer
}

In diesem Codeausschnitt importieren Sie die requests -Bibliothek und definieren Variablen für jeden HTTP-Header als Zeichenfolge. Dann erstellen Sie ein Wörterbuch mit dem Namen headers, um die HTTP-Header-Namen den definierten Variablen zuzuordnen.

Fügen Sie als Nächstes dem Skript den folgenden Code hinzu, um eine HTTP-Anfrage ohne die benutzerdefinierten Header zu senden und das Ergebnis auszudrucken:

URL = 'https://books.toscrape.com/catalogue/category/books/mystery_3/index.html'

r = requests.get(URL)
print(r.request.headers)

Hier weisen Sie die URL der Mystery-Bücher einer Variablen zu. Dann rufen Sie die requests.get-Methode mit dieser URL als einzigem Parameter auf und drucken den Anfrage-Header aus.

Ihre Ausgabe sollte so aussehen:

{'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}

Wie Sie sehen können, identifizieren die Standard-HTTP-Header Ihren Scraper wahrscheinlich als Bot. Aktualisieren Sie die Zeile requests.get, indem Sie einen zusätzlichen Parameter an die Funktion übergeben:

r = requests.get(URL, headers=custom_headers)

Hier übergeben Sie das von Ihnen erstellte Wörterbuch custom_header und den Parameter URL an die requests.get-Methode.

Ihre Ausgabe sollte so aussehen:

{'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8', 'Connection': 'keep-alive', 'Accept-Language': 'en-GB,en;q=0.6', 'Cookie': 'zero-chakra-ui-color-mode=light-zero; AMP_MKTG_8f1ede8e9c=JTdCJTIycmVmZXJyZXIlMjIlM0ElMjJodHRwcyUzQSUyRiUyRnd3dy5nb29nbGUuY29tJTJGJTIyJTJDJTIycmVmZXJyaW5nX2RvbWFpbiUyMiUzQSUyMnd3dy5nb29nbGUuY29tJTIyJTdE; AMP_8f1ede8e9c=JTdCJTIyZGV2aWNlSWQlMjIlM0ElMjI1MjgxOGYyNC05ZGQ3LTQ5OTAtYjcxMC01NTY0NzliMzAwZmYlMjIlMkMlMjJzZXNzaW9uSWQlMjIlM0ExNzA4MzgxNTQ4ODQzJTJDJTIyb3B0T3V0JTIyJTNBZmFsc2UlMkMlMjJsYXN0RXZlbnRUaW1lJTIyJTNBMTcwODM4MjE1NTQ2MCUyQyUyMmxhc3RFdmVudElkJTIyJTNBNiU3RA==', 'Referer': 'https://books.toscrape.com/'}

Hier können Sie sehen, dass die Header mit den Informationen aktualisiert wurden, die Sie von Ihrem Browser erhalten haben. Dadurch wird es für jeden Webserver schwieriger, zu erkennen, dass Sie automatisch deren Websites besuchen, was Ihre Chancen auf eine Sperrung verringert.

Vorteile der Optimierung von Headern

Die richtige Optimierung Ihrer HTTP-Header ist entscheidend, um den kontinuierlichen Erfolg Ihres Scraping-Vorgangs sicherzustellen.

Ein Vorteil der Optimierung besteht darin, dass die Blockierungsrate reduziert wird. Mit optimierten Headern ähneln die Interaktionen Ihrer Scraper mit Websites denen eines typischen Benutzers. Dadurch können Sie einige Bot-Erkennungssysteme umgehen und die Wahrscheinlichkeit, dass Ihr Scraper im Laufe der Zeit blockiert wird (Blockierungsrate), verringern.

Ein weiterer Vorteil der Optimierung Ihrer HTTP-Header ist eine höhere Erfolgsrate, da reduzierte Blockierungsraten das Scrapen von Daten erleichtern.

Darüber hinaus erhöht die Konzentration auf die Optimierung Ihrer HTTP-Header die Effizienz Ihres Scraping-Vorgangs. Dadurch wird sichergestellt, dass Sie relevante Daten erhalten, die Ihren Anforderungen entsprechen.

Tipps zur Header-Optimierung

Die richtige Konfiguration Ihres Headers ist zwar wichtig für den Erfolg Ihrer Web-Scraping-Projekte, aber damit ist es noch nicht getan – vor allem, wenn Sie Daten in großem Umfang scrapen müssen. Im Folgenden finden Sie einige Tipps zur Erhöhung der Erfolgsquote Ihres Scrapers:

Header rotieren

Sie können nicht nur Header wie den User-Agent definieren, um den normalen Traffic eines Benutzers zu imitieren, sondern auch mehrere verschiedene HTTP-Header definieren und zwischen ihnen pro Anfrage wechseln. Auf diese Weise können Sie simulieren, dass mehrere Benutzer auf den Webserver zugreifen, und den generierten Traffic zwischen ihnen verteilen. Das reduziert Ihre Chancen, als Bot identifziert und geblockt zu werden, weiter.

Je nach Umfang Ihres Scraping-Vorgangs können Sie zwischen zehn und Hunderten von User-Agents verwenden. Je mehr Anfragen Sie innerhalb kurzer Zeit senden müssen, desto sinnvoller ist es für Sie, zwischen mehreren User-Agents zu wechseln.

Header auf dem neuesten Stand halten

Ein weiterer Aspekt bei der Optimierung von HTTP-Headern ist die regelmäßige Pflege Ihrer Header. Benutzer aktualisieren ihre Browser in der Regel mit der Veröffentlichung neuer Versionen, sodass die Wahrscheinlichkeit groß ist, dass die gültigen Header zu einem bestimmten Zeitpunkt denen der neuesten Browserversion entsprechen. Wenn Sie Ihren Header mit einem oder mehreren User-Agents versehen, die sich auf veraltete Browser- oder Softwareversionen beziehen, können Webserver Sie von der Masse der normalen Benutzer unterscheiden und Ihre Anfrage möglicherweise blockieren. Das Gleiche gilt für andere Header, die häufig aktualisiert werden müssen.

Schlechte Header-Konfigurationen vermeiden

Sie sollten sich auch bemühen, schlechte Header-Konfigurationen zu vermeiden. Dies kann passieren, wenn ein Header, wie z. B. User-Agent, nicht mit allen anderen Standard-Headern übereinstimmt, die Sie festgelegt haben. Wenn zum Beispiel der User-Agent auf einen Mozilla Firefox-Browser unter Windows eingestellt ist, während die übrigen Header für einen Chromium-Browser unter Windows definiert sind, wird Ihr Scraper wahrscheinlich blockiert.

Wenn Sie einen Proxy-Server verwenden, der als Vermittler zwischen dem Client und dem Server fungiert, können Sie außerdem unbeabsichtigt Header hinzufügen, die es einem Erkennungssystem auf der Seite des Browsers ermöglichen, Ihre Anfragen als automatisiert zu identifizieren. Um Ihre Header zu überprüfen, senden Sie Testanfragen und stellen Sie sicher, dass Ihr Proxy-Server keine identifizierenden Header hinzufügt.

Fazit

In diesem Artikel haben Sie etwas über HTTP-Header gelernt, darunter die Header User-AgentRefererAccept-Language und Cookie, die zu den wichtigsten Headern hinsichtlich Web Scraping gehören. Sie müssen Ihre HTTP-Header optimieren, um die Langlebigkeit und Nützlichkeit Ihres Scraping-Vorgangs sicherzustellen.

Die richtige Verwendung von HTTP-Headern für Anfragen in Ihren Web-Scraping-Projekten verringert Ihre Blockierungsrate und erhöht Ihre Erfolgsquote, indem sie es einfacher macht, Anti-Scraping-Mechanismen zu umgehen. Außerdem wird Ihr Scraping-Vorgang dadurch effizienter. Fortgeschrittene Anti-Scraping-Mechanismen, die JavaScript-Herausforderungen und CAPTCHAs beinhalten, können jedoch immer noch ein Hindernis sein. Bright Data vereinfacht Ihre Scraping-Tätigkeiten, indem es Ihnen ein preisgekröntes und benutzerfreundliches Proxy-Netzwerk, einen fortschrittlichen Scraping-Browser, eine umfassende Web Scraper-IDE und einen Web Unlocker zur Verfügung stellt. Ganz gleich, ob Sie Anfänger oder Experte sind, diese Produktangebote können Ihnen helfen, Ihre Scraping-Ziele zu erreichen. Starten Sie eine kostenlose Testversion und erkunden Sie noch heute die Angebote von Bright Data.