In diesem Tutorial lernen Sie Folgendes:
- Warum Sie den User-Agent-Header einstellen müssen
- Der Standard-Python-
Requests
-User-Agent - Wie Sie den User-Agent in Requests ändern und deaktivieren
- Wie Sie User-Agent-Rotation in Python implementieren
Legen wir los!
Warum Sie den User-Agent-Header immer einstellen sollten
Der User-Agent-HTTP-Header wird von Browsern, Anwendungen, die Webanfragen ausführen, und HTTP-Clients gesetzt, um die Client-Software zu identifizieren, die die Request stellt. Dieser Wert enthält in der Regel Informationen über den Browser- oder Anwendungstyp, das Betriebssystem und die Architektur, von der die Request stammt.
Hier ist zum Beispiel der User-Agent, der von Chrome zum Zeitpunkt dieses Schreibens beim Besuch von Webseiten festgelegt wurde:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
Die Komponenten dieses User-Agents sind:
Mozilla/5.0:
Wurde in der Vergangenheit verwendet, um die Kompatibilität mit Mozilla-Browsern anzuzeigen. Es ist jetzt ein übliches Präfix, das User-Agents aus Kompatibilitätsgründen hinzugefügt wird.Windows NT 10.0; Win64; x64
: Betriebssystem (Windows NT 10.0
), Plattform (Win64
) und Architektur (x64).AppleWebKit/537.36
: Browser-Engine, die von der Chrome-Version verwendet wird, die die Request stellt.KHTML, wie Gecko
: Kompatibilität mit der von Mozilla verwendeten KHTML-Engine und der Gecko-Layout-Engine.
Chrome/125.0.0.0
: Browsername und dessen Version.Safari/537.36
: Kompatibilität mit Safari.
Kurz gesagt, der User-Agent ist entscheidend, um festzustellen, ob eine Request von einem bekannten Browser oder einer anderen Art von Software stammt.
Scraping-Bots neigen dazu, standardmäßige oder inkonsistente User-Agent-Strings zu verwenden, wodurch ihre automatisierte Natur zum Vorschein kommt. Folglich schützen Anti-Scraping-Lösungen Daten auf Webseiten, indem sie anhand des User-Agent
-Headers ermitteln, ob der aktuelle Benutzer legitim oder ein Bot ist.
Weitere Informationen finden Sie in unserem Leitfaden zu User-Agents für Web Scraping.
Was ist der Standard-Python-User-Agent für Requests?
Wie die meisten HTTP-Clients setzt Requests einen User-Agent
-Header, wenn HTTP-Requests gestellt werden. Insbesondere folgt der von Requests
festgelegte Standard-User-Agent dem folgenden Format:
python-requests/X.Y.Z
Wobei X.Y.Z
die Version des Requests
-Pakets ist, das in Ihrem Projekt installiert ist.
Stellen Sie sicher, dass der obige String tatsächlich der Requests-User-Agent ist, indem Sie eine GET-Request an den Endpunkt httpbin.io /user-agent
stellen. Diese API gibt den User-Agent
-Header zurück, der aus der eingehenden Request gelesen wurde. Mit anderen Worten, es ermöglicht Ihnen, den User-Agent zu überprüfen, der automatisch von einem HTTP-Client eingerichtet wurde.
Importieren Sie Requests
und verwenden Sie die get()-Methode, um die gewünschte HTTP-Request auszuführen:
import requests
# make an HTTP GET request to the specified URL
response = requests.get('https://httpbin.io/user-agent')
# parse the API response as JSON and print it
print(response.json())
Führen Sie das obige Python-Snippet aus und Sie erhalten so etwas:
{'user-agent': 'python-requests/2.32.3'}
Der User-Agent ist python-requests/2.32.3
, was eindeutig identifiziert, dass die Request aus der Requests
-Bibliothek stammt. Infolgedessen können Anti-Bot-Systeme eine solche Request als nicht von einem menschlichen Benutzer stammend markieren und sie sofort blockieren. Deshalb ist es so wichtig, den User-Agent-Wert für Python-Requests zu ändern!
Weitere Informationen finden Sie in unserem vollständigen Leitfaden zur Python-Requests-Bibliothek.
So ändern Sie den Python-Requests-User-Agent
Schauen wir uns an, wie man den Wert des User-Agent
-Headers in Requests ändert und aufheben kann!
Einrichtung eines benutzerdefinierten User-Agent
Requests bietet keine direkte Option zum Festlegen des User-Agent-Werts. Gleichzeitig ist User-Agent
nichts anderes als ein HTTP-Header. Sie können seinen Wert also wie jeden anderen HTTP-Header anpassen, indem Sie die Option headers
wie folgt verwenden:
import requests
# custom user agent header
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36'
}
# make an HTTP GET request to the specified URL
# setting custom headers
response = requests.get('https://httpbin.io/user-agent', headers=headers)
# parse the API response as JSON and print it
print(response.json())
Führen Sie den obigen Python-Snippet erneut aus, und dieses Mal wird es Folgendes drucken:
{'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36'}
Wunderbar! Sie haben gerade gelernt, dass Sie, um einen benutzerdefinierten User-Agent für Python-Anfragen einzurichten, Folgendes tun müssen:
- Definieren Sie ein Python-Dictionary mit einer
User-Agent
-Eigenschaft. - Übergeben Sie das Dictionary an den Parameter
headers
derRequests
-Methode, die Sie für die HTTP-Request verwenden.
Vergessen Sie nicht, dass HTTP-Header-Namen nicht zwischen Groß- und Kleinschreibung unterscheiden, sodass die Eigenschaftsnamen im Header-Dictionary das von Ihnen bevorzugte Format haben können.
Hinweis: Dieser Ansatz funktioniert auch mit request()
, post()
, patch()
, put()
, delete()
und head()
.
Um einen globalen Requests
-User-Agent einzurichten, müssen Sie eine benutzerdefinierte HTTP-Session wie folgt konfigurieren:
import requests
# initialize an HTTP session
session = requests.Session()
# set a custom header in the session
session.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36'
# perform a GET request within the HTTP session
response = session.get('https://httpbin.io/user-agent')
# print the data returned by the API
print(response.json())
# other requests with a custom user agent within the session ...
Dadurch wird dieselbe Ausgabe wie zuvor erzeugt. Wenn Sie mit HTTP-Sessions in Requests nicht vertraut sind, schauen Sie sich die Dokumentation an.
Deaktivierung des User-Agent
HTTP-Request auszuführen, ohne den User-Agent einzustellen, ist eine schlechte Praxis, die leicht Anti-Bot-Lösungen auslösen kann. Es gibt jedoch Situationen, in denen Sie möglicherweise den User-Agent
-Header entfernen müssen.
Die erste Möglichkeit, den User-Agent in Requests zu deaktivieren, besteht darin, den User-Agent-Header
auf None
zu setzen:
import requests
# custom user agent header
headers = {
'user-agent': None
}
# make an HTTP GET request to the specified URL
# setting custom headers
response = requests.get('https://httpbin.io/user-agent', headers=headers)
# parse the API response as JSON and print it
print(response.json())
Das wird nicht funktionieren, weil Requests
hinter den Kulissen urllib3
verwendet. Daher wird standardmäßig der User-Agent-Wert urllib3
verwendet:
python-urllib3/2.2.1
Im Detail gibt der Endpunkt /user-agent
etwas zurück wie:
{'user-agent': 'python-urllib3/2.2.1'}
Stattdessen müssen Sie urllib3
so konfigurieren, dass der Standardwert für den User-Agent mit urllib3.util.SKIP_HEADER
übersprungen wird. Stellen Sie sicher, dass der User-Agent nicht eingerichtet wurde, indem Sie auf den Endpunkt /
headers
von httpbin.io abzielen, der die HTTP-Header der eingehenden Request zurückgibt:
import requests
import urllib3
# exclude the default user agent value
headers = {
'user-agent': urllib3.util.SKIP_HEADER
}
# prepare the HTTP request to make
req = requests.Request('GET', 'https://httpbin.io/headers')
prepared_request = req.prepare()
# set the custom headers with no user agent
prepared_request.headers = headers
# create a requests session and perform
# the request
session = requests.Session()
response = session.send(prepared_request)
# print the returned data
print(response.json())
Führen Sie den obigen Python-Code aus und Sie erhalten Folgendes:
{'headers': {'Accept-Encoding': ['identity'], 'Host': ['httpbin.io']}}
Fantastisch! Wie erwartet, kein Python-Request-User-Agent.
Implementieren Sie die User-Agent-Rotation in Requests.
Es reicht möglicherweise nicht aus, den Standard-User-Agent
-Header von einem echten Browser auf einen richtigen Wert zu ändern. Wenn Sie zu viele Requests von derselben IP-Adresse aus mit demselben User-Agent ausführen, kann dies den Verdacht von Anti-Bot-Technologien auslösen. Diese Systeme überwachen alle eingehenden Requests und wissen, dass automatische Requests normalerweise regelmäßigen Mustern folgen.
Der Schlüssel zur Vermeidung der Bot-Erkennung besteht darin, Ihre Requests nach dem Zufallsprinzip zu sortieren. Eine gute Möglichkeit, jede Request von der anderen zu unterscheiden, ist die User-Agent-Rotation. Die Idee hinter dieser Technik besteht darin, den vom HTTP-Client verwendeten User-Agent-Header ständig zu ändern. Auf diese Weise können Sie Ihre automatisierten Requests so aussehen lassen, als kämen sie von verschiedenen Browsern, wodurch das Risiko verringert wird, dass Blockierungen oder vorübergehende Sperren ausgelöst werden.
Folgen Sie nun den folgenden Schritten, um die User-Agent-Rotation in Requests zu implementieren!
Schritt Nr. 1: Rufen Sie eine Liste gültiger User-Agents ab.
Sammeln Sie eine Liste der richtigen User-Agents von einer Website wie User Agent String.com und speichern Sie sie in einem Python-Array:
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 14.5; rv:126.0) Gecko/20100101 Firefox/126.0",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0"
# other user agents...
]
Schritt Nr. 2: Extrahieren Sie einen Random-User-Agent.
Extrahiert zufällig ein User-Agent-String aus dem Array mit random.choice()
:
random_user_agent = random.choice(user_agents)
Vergessen Sie nicht, dass die obige Zeile den folgenden Import erfordert:
import random
Schritt Nr. 3: Stellen Sie den Random-User-Agent ein und stellen Sie die HTTP-Request.
Definieren Sie das Header-Dictionary mit dem Random-User-Agent und verwenden Sie es in der Requests
-Request:
headers = {
'user-agent': random_user_agent
}
response = requests.get('https://httpbin.io/user-agent', headers=headers)
print(response.json())
Diese Anweisungen erfordern diesen Import:
import requests
Schritt Nr. 4: Bringen Sie alles zusammen.
So wird Ihre Python-Requests-User-Agent-Rotationslogik aussehen:
import random
import requests
# list of user agents
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 14.5; rv:126.0) Gecko/20100101 Firefox/126.0",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0"
# other user agents...
]
# pick a random user agent from the list
random_user_agent = random.choice(user_agents)
# set the random user agent
headers = {
'user-agent': random_user_agent
}
# perform a GET request to the specified URL
# and print the response data
response = requests.get('https://httpbin.io/user-agent', headers=headers)
print(response.json())
Führen Sie dieses Skript ein paar Mal aus und Sie erhalten verschiedene User-Agent-Strings.
Und voilà! Sie sind jetzt ein Meister darin, Python-User-Agent-Werte für Requests festzulegen.
Fazit
Mithilfe dieses Leitfadens haben Sie gelernt, wie wichtig es ist, den User-Agent
-Header einzustellen und wie Sie das in Request
tun. Auf diese Weise können Sie grundlegende Anti-Bot-Systeme dazu bringen, zu glauben, dass Ihre Requests von legitimen Browsern stammen. Fortschrittliche Lösungen können Sie jedoch möglicherweise immer noch erkennen und blockieren. Um IP-Sperren zu vermeiden, könnten Sie einen Proxy mit Requests
verwenden, aber selbst das reicht möglicherweise nicht aus!
Vermeiden Sie diese Komplikationen mit Web Scraper API. Diese Scraping-API der nächsten Generation bietet alles, was Sie zum Ausführen automatisierter Web-Requests mit Requests
oder einem anderen HTTP-Client benötigen. Sie umgeht mühelos Anti-Bot-Technologien für Sie und stützt sich auf Funktionen wie IP und User-Agent-Rotation. Es war noch nie so einfach, erfolgreiche automatisierte Requests auszuführen!
Sprechen Sie mit einem unserer Datenexperten über unsere Scraping-Lösungen oder entdecken Sie einfach alle verfügbaren Produkte, indem Sie sich jetzt registrieren. Kostenlose Testversionen verfügbar!
Keine Kreditkarte erforderlich