Python-Requests-User-Agent-Leitfaden: Einstellung und Änderung

Lassen Sie sich nicht länger von Anti-Bot-Systemen blockieren! In diesem Tutorial lernen Sie, den User-Agent-Header in Python-Requests für sicheres und erfolgreiches Web Scraping einzustellen und zu rotieren.
9 min read
Requests User Agent Guide blog image

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.
  1. Chrome/125.0.0.0: Browsername und dessen Version.
  2. 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:

  1. Definieren Sie ein Python-Dictionary mit einer User-Agent-Eigenschaft.
  2. Übergeben Sie das Dictionary an den Parameter headers der Requests-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!