Leitfaden zum Web-Scraping mit cURL-Impersonate

Lernen Sie den Einsatz von Curl-Impersonate, um das Browserverhalten beim Web-Scraping nachzuahmen, mit ausführlichen Anleitungen zur Verwendung von Befehlszeilen und Python sowie Tipps zu fortgeschrittenen Themen.
10 min read
web scraping with cURL impersonate blog image

In diesem Leitfaden erfahren Sie Folgendes:

  • Was cURL-Impersonate ist
  • Hintergründe des Projekts und dessen Funktionsweise
  • Verwendung über die Befehlszeile
  • Wie man es in Python verwendet
  • Fortgeschrittene Techniken und Aspekte

Legen wir also gleich los!

Was ist cURL-Impersonate?

cURL-Impersonate ist eine spezielle Version von cURL, die das Verhalten der wichtigsten Browser (Chrome, Edge, Safari und Firefox) nachahmt. Im Detail führt dieses Tool TLS- und HTTP-Handshakes aus, die denen echter Browser sehr ähnlich sind.

Der HTTP-Client kann entweder über das Befehlszeilentool curl-Impersonate, ähnlich wie das reguläre curl, oder als Bibliothek in Python verwendet werden.

Dies sind die Browser, die imitiert werden können:

Browser Simuliertes Betriebssystem Wrapper-Skript
Chrome 99 Windows 10 curl_chrome99
Chrome 100 Windows 10 curl_chrome100
Chrome 101 Windows 10 curl_chrome101
Chrome 104 Windows 10 curl_chrome104
Chrome 107 Windows 10 curl_chrome107
Chrome 110 Windows 10 curl_chrome110
Chrome 116 Windows 10 curl_chrome116
Chrome 99 Android 12 curl_chrome99_android
Edge 99 Windows 10 curl_edge99
Edge 101 Windows 10 curl_edge101
Firefox 91 ESR Windows 10 curl_ff91esr
Firefox 95 Windows 10 curl_ff95
Firefox 98 Windows 10 curl_ff98
Firefox 100 Windows 10 curl_ff100
Firefox 102 Windows 10 curl_ff102
Firefox 109 Windows 10 curl_ff109
Firefox 117 Windows 10 curl_ff117
Safari 15.3 macOS Big Sur curl_safari15_3
Safari 15.5 macOS Monterey curl_safari15_5

Für jeden unterstützten Browser existiert ein spezielles Wrapper-Skript. Dieses konfiguriert curl-Impersonate mit den entsprechenden Headern, Flags und Einstellungen, um den jeweiligen Browser zu simulieren.

Funktionsweise von curl-Impersonate

Sobald Sie eine Anfrage an eine Website über HTTPS senden, wird ein Prozess mit der Bezeichnung TLS-Handshake ausgelöst. Während dieses Handshakes werden Details über den HTTP-Client an den Web-Server übermittelt, wodurch ein eindeutiger TLS-Fingerabdruck erstellt wird. 

HTTP-Clients verfügen über Fähigkeiten und Konfigurationen, die sich von denen eines standardmäßigen Browsers unterscheiden. Diese Diskrepanz führt zu einem TLS-Fingerabdruck, der den Einsatz von HTTP-Clients mühelos aufdecken kann. Folglich können die von der Zielseite verwendeten Anti-Bot-Maßnahmen Ihre Anfragen als automatisiert erkennen und sie möglicherweise blockieren.

cURL-Impersonate behebt dieses Problem, indem es das Standard-Tool curl so modifiziert, dass sein TLS-Fingerabdruck dem von echten Browsern entspricht. Auf diese Weise wird das Ziel erreicht:

  • Änderung der TLS-Bibliothek: Für die Chrome-Version von curl-Impersonate wird curl mit BoringSSL, der TLS-Bibliothek von Google, kompiliert. Bei der Firefox-Version wird curl mit NSS kompiliert, der von Firefox verwendeten TLS-Bibliothek.
  • Anpassungen der Konfiguration: Die Art und Weise, wie cURL verschiedene TLS-Erweiterungen und SSL-Optionen konfiguriert, wird geändert, um die Einstellungen von echten Browsern nachzuahmen. Außerdem wird Unterstützung für neue TLS-Erweiterungen ergänzt, die häufig von Browsern verwendet werden.
  • HTTP/2-Handshake-Anpassung: Hier werden die von cURL für HTTP/2-Verbindungen verwendeten Einstellungen geändert, um diese an die von echten Browsern anzupassen.
  • Nicht-standardmäßige Flags: Die Funktion wird mit bestimmten nicht-standardmäßigen Flags ausgeführt, wie beispielsweise --ciphers, --curvesund einigen -H-Headern, die zusätzlich zur Nachahmung des Browserverhaltens beitragen.

Dadurch bewirkt curl-Impersonate , dass Curl- Anfragen aus der Netzwerkperspektive so aussehen, als ob sie von einem echten Browser gestellt wurden. Dies ist zur Umgehung diverser Bot-Erkennungsmechanismen von Nutzen!

curl-impersonate: Tutorial zu Befehlszeilen

Führen Sie die nachfolgenden Schritte aus, um die Verwendung von cURL-Impersonate über die Befehlszeile zu erlernen.

Hinweis: Aus Gründen der Vollständigkeit werden mehrere Installationsmethoden angezeigt. Sie müssen sich jedoch nur für eine entscheiden. Die empfohlene Methode ist die Nutzung von Docker.

Installation aus vorkompilierten Binärdateien

Sie können vorkompilierte Binärdateien für Linux und macOS von der GitHub-Veröffentlichungsseite des Projekts herunterladen. Diese Binärdateien beinhalten ein statisch kompiliertes curl-Impersonate. Vergewissern Sie sich vor der Verwendung, dass Sie die folgenden Komponenten installiert haben:

  • NSS (Network Security Services): Eine Reihe von Bibliotheken, die zur Unterstützung der plattformübergreifenden Entwicklung von sicherheitsrelevanten Client- und Server-Anwendungen konzipiert wurden. NSS wird in Mozilla-Produkten wie Firefox und Thunderbird zur Verwaltung des TLS-Protokolls verwendet.
  • CA-Zertifikate: Eine Sammlung von digitalen Zertifikaten, die während der sicheren Kommunikation die Identität von Servern und Clients authentifizieren. Diese Zertifikate gewährleisten, dass Ihre Serververbindung vertrauenswürdig ist, indem sie sicherstellen, dass das Zertifikat des Servers von einer anerkannten Zertifizierungsstelle ( CA) unterzeichnet wurde.

Um die Voraussetzungen zu erfüllen, führen Sie unter Ubuntu Folgendes aus: 

sudo apt install libnss3 nss-plugin-pem ca-certificates

Auf Red Hat, Fedora oder CentOS, führen Sie Folgendes aus: 

yum install nss nss-pem ca-certificates

Auf Archlinux, initiieren Sie: 

pacman -S nss ca-certificates

Auf macOS führen Sie folgenden Befehl aus: 

brew install nss ca-certificates

Stellen Sie außerdem sicher, dass Sie zlib auf Ihrem System installiert haben, da die vorkompilierten Binärpakete gzipped sind.

Installation über Docker

Docker-Images, die auf Alpine Linux und Debian beruhen und bei denen curl-Impersonate kompiliert und einsatzbereit ist, sind auf Docker Hub verfügbar. Diese Images enthalten die Binärdatei sowie alle notwendigen Wrapper-Skripte.

Chrome-Images (*-chrome) können sich als Chrome, Edge und Safari ausgeben. Firefox-Images(*-ff) hingegen können Firefox nachahmen.

Um das von Ihnen bevorzugte Docker-Image herunterzuladen, führen Sie einen der folgenden Befehle aus.

Für die Chrome-Version auf Alpine Linux:

docker pull lwthiker/curl-impersonate:0.5-chrome

Für die Firefox-Version auf Alpine Linux:

docker pull lwthiker/curl-impersonate:0.5-ff

Für die Chrome-Version auf Debian:

docker pull lwthiker/curl-impersonate:0.5-chrome-slim-buster

Für die Firefox-Version auf Debian:

docker pull lwthiker/curl-impersonate:0.5-ff-slim-buster

Nach dem Herunterladen können Sie – wie Sie gleich sehen werden – curl-Impersonate mit einem Docker-Befehl ausführen.

Installation aus Distributionspaketen

Unter Arch Linux ist curl-Impersonate über das AUR-Paket curl-Impersonate-bin verfügbar.

Unter macOS können Sie das nicht offizielle Homebrew-Paket für die Chrome-Version mit folgenden Befehlen installieren:

brew tap shakacode/brew

brew install curl-impersonate

Grundlegende Verwendung

Unabhängig von der Installationsmethode können Sie nun einen curl-Impersonate- Befehl mit folgender Syntax ausführen:

curl-impersonate-wrapper [options] [target-url]

Oder, entsprechend, auf Docker, führen Sie in etwa Folgendes aus:

docker run --rm lwthiker/curl-impersonate:[curl-impersonate-version]curl-impersonate-wrapper [options] [target_url]

Wo:

  • curl-Impersonate-wrapper ist der cURL-Impersonate-Wrapper, den Sie verwenden wollen (z. B. curl_chrome116, curl_edge101, curl_ff117, curl_safari15_5, usw.).
  • Bei Optionen handelt es sich um die optionalen Flags, die an cURL weitergegeben werden. 
  • target-url ist die URL der Website, an die eine HTTP-Anfrage gestellt werden soll.

SGehen Sie bei der Angabe von benutzerdefinierten Optionen behutsam vor, da einige Flags die TLS-Signatur von cURL verändern, wodurch sie möglicherweise entdeckt werden kann. Weitere Informationen finden Sie in unserer Einleitung zu CURL.

Beachten Sie, dass die Wrapper standardmäßig eine Sammlung von HTTP-Headern setzen. Zur Anpassung dieser Header müssen Sie die Wrapper-Skripte an Ihre Bedürfnisse angleichen.

Verwenden wir nun curl-Impersonate, um mit einem Chrome-Wrapper eine Anfrage an die Wikipedia-Homepage zu stellen:

curl_chrome110 https://www.wikipedia.org

Oder, falls Sie ein Docker-Benutzer sind:

docker run --rm lwthiker/curl-impersonate:0.5-chrome curl_chrome110 https://www.wikipedia.org

Das Ergebnis wird wie folgt lauten:

<html lang="en" class="no-js">

  <head>

    <meta charset="utf-8">

    <title>Wikipedia</title>

    <meta name="description" content="Wikipedia is a free online encyclopedia, created and edited by volunteers around the world and hosted by the Wikimedia Foundation.">

<!-- omitted for brevity... -->

Wunderbar! Der Server gibt den HTML-Code der gewünschten Seite zurück, als ob Sie über einen Browser darauf zugreifen würden.

Sie können jetzt cURL-Impersonate genauso für Web-Scraping verwenden, wie Sie dies mit cURL für Web-Scraping tun würden.

curl-impersonate: Python-Tutorial

Die Verwendung der Befehlszeile eignet sich hervorragend für Testzwecke, Web-Scraping-Prozesse beruhen jedoch in der Regel auf benutzerdefinierten Skripts, die in Sprachen wie Python geschrieben wurden. Entdecken Sie die besten Programmiersprachen für Web-Scraping!

Glücklicherweise können Sie cURL-Impersonate dank curl-cffi in Python verwenden. Es handelt sich hierbei um eine Python-Anbindung für curl-Impersonate über cffi Vor allem kann curl-cffi die TLS/JA3- und HTTP/2-Fingerabdruck von Browsern nachahmen, um sich mit Websites zu verbinden, ohne blockiert zu werden.

Erfahren Sie im folgenden Abschnitt Schritt für Schritt, wie Sie es verwenden können!

Voraussetzungen

Bevor Sie loslegen, stellen Sie Folgendes sicher:

Wahlweise wird eine Python-IDE wie Visual Studio Code mit der Python-Erweiterung empfohlen.

Installation

Installieren Sie curl_cfii über pip wie folgt:

pip install curl_cfii

Verwendung

curl_cffi bietet sowohl eine Low-level curl- API als auch eine High-level requests-ähnliche API. Erfahren Sie mehr in der offiziellen Dokumentation.

Normalerweise wird die requests-ähnliche API verwendet. Importieren Sie hierzu requests aus curl_cffi:

from curl_cffi import requests

Sie können nun die Chrome-Version von cURL-Impersonate in Python verwenden, um sich mit einer Website zu verbinden:

response = requests.get("https://www.wikipedia.org", impersonate="chrome")

Print the response HTML with:

print(response.text)

Put it all together, and you will get:

from curl_cffi import requests

# make a GET request to the target page with

# the Chrome version of curl-impersonate

response = requests.get("https://www.wikipedia.org", impersonate="chrome")

# print the server response

print(response.text)

Run the above Python script, and it will print:

<html lang="en" class="no-js">

  <head>

    <meta charset="utf-8">

    <title>Wikipedia</title>

    <meta name="description" content="Wikipedia is a free online encyclopedia, created and edited by volunteers around the world and hosted by the Wikimedia Foundation.">

<!-- omitted for brevity... -->

Großartig! Jetzt sind Sie bereit, Web-Scraping in Python durchzuführen, genauso wie Sie es mit Requests und Beautiful Soup tun würden. Weitere Anleitungen finden Sie in unserem Leitfaden zu Web-Scraping mit Python.

Fortgeschrittene Verwendung von cURL-Impersonate

Es ist an der Zeit, sich mit einigen fortgeschrittenen Einsatzmöglichkeiten und Techniken zu befassen!

Proxy-Integration

Das Simulieren von Browser-Fingerabdruck könnte unter Umständen nicht genügen. Anti-Bot-Lösungen können Sie eventuell weiterhin blockieren, vor allem, wenn Sie zu viele automatische Anfragen in einer kurzen Zeitspanne stellen Hier kommen Proxys ins Spiel!

Indem Sie Ihre Anfrage über einen Proxy-Server leiten, können Sie eine neue IP-Adresse abrufen und Ihre Identität schützen.

Nehmen wir an, die URL zu Ihrem Proxy-Server lautet:

http://84.18.12.16:8888

cURL-Impersonate unterstützt die Proxy-Integration über die Befehlszeile mit dem Flag-x:

curl-impersonate -x http://84.18.12.16:8888 https://httpbin.org/ip

Weitere Einzelheiten finden Sie in der Anleitung zur Einrichtung eines Proxys in cURL.

https://www.youtube.com/watch?v=oadUjiVxDFY&

In Python können Sie einen Proxy auf ähnliche Weise einrichten, wie Sie dies bei Anfragen tun würden:

from curl_cffi import requests

proxies = {"http": "http://84.18.12.16:8888", "https": "http://84.18.12.16:8888"}

response = requests.get("https://httpbin.org/ip", impersonate="chrome", proxies=proxies)

Weitere Informationen finden Sie unter Integration eines Proxys in Python-Anfragen.

Libcurl-Integration

libcurl-impersonate ist eine kompilierte Version von libcurl , die über dieselbe Funktionalität wie cURL-Impersonate verfügt. Darüber hinaus bietet sie eine erweiterte API zur Anpassung von TLS-Details und Header-Konfigurationen.

libcurl-Impersonate lässt sich über das vorkompilierte Paket installieren. Ziel dieser Lösung ist es, die Integration von cURL-Impersonate in Bibliotheken verschiedener Programmiersprachen zu erleichtern, wie etwa das curl-cffi Python-Paket .

Fazit

In diesem Artikel haben Sie gelernt, was cURL-Impersonate ist, wie es funktioniert und wie es sowohl über CLI als auch in Python verwendet werden kann. Nun verstehen Sie, dass es sich dabei um ein Tool handelt, mit dem Sie HTTP-Anfragen stellen und dabei den TLS-Fingerabdruck von echten Browsern simulieren können.

Allerdings können fortschrittliche Anti-Bot-Lösungen wie Cloudflare Ihre Anfragen immer noch als von einem Bot eingehende Anfragenerkennen. Wie lautet die Lösung? Scraper-API von Bright Data – eine umfassende Scraping-Lösung der nächsten Generation.

Die Scraper-API bietet alles, was Sie zum Ausführen automatisierter Web-Anfragen mit cURL oder einem anderen HTTP-Client benötigen. Mit dieser umfassenden Lösung können Sie Browser-Fingerabdrücke erstellen, CAPTCHAs auflösen und die IP-Rotation nutzen, um jede Anti-Bot-Technologie zu umgehen. Es war noch nie so einfach, automatisierte HTTP-Anfragen auszuführen!

Melden Sie sich jetzt für eine kostenlose Testversion der Web-Scraping-Infrastruktur von Bright Data an oder sprechen Sie mit einem unserer Datenexperten über unsere Scraping-Lösungen.

Keine Kreditkarte erforderlich