Skip to content

Setzen, ändern und rotieren Sie User-Agents in Node.js, um die Anti-Bot-Erkennung zu umgehen und den Erfolg beim Web-Scraping zu verbessern.

Notifications You must be signed in to change notification settings

bright-data-de/node-js-user-agent

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 

Repository files navigation

Festlegen und Ändern des User Agent in Node.js

Promo

Dieser Leitfaden erklärt, wie Sie den User-Agent-Header mit Node.js festlegen und eine User-Agent-Rotation implementieren, um die Anti-Bot-Erkennung zu umgehen, während Sie Scraping mit node.js durchführen:

Warum das Festlegen eines User Agent so wichtig ist

Der User-Agent-Header ist eine Zeichenkette, die den Client identifiziert, der eine HTTP-Anfrage stellt. Er enthält in der Regel Details über den Browser, die Anwendung, das Betriebssystem und die Systemarchitektur.

Zum Beispiel ist hier die User-Agent-Zeichenkette, die Chrome beim Ausführen einer Anfrage setzt:

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

Unten finden Sie eine Aufschlüsselung der Komponenten in dieser User-Agent-Zeichenkette:

  • Mozilla/5.0: Ursprünglich genutzt, um Kompatibilität mit Mozilla-Browsern anzuzeigen; dieses Präfix wird heute aus Kompatibilitätsgründen hinzugefügt.
  • Windows NT 10.0; Win64; x64: Gibt das Betriebssystem (Windows NT 10.0), die Plattform (Win64) und die Systemarchitektur (x64) an.
  • AppleWebKit/537.36: Bezieht sich auf die Browser-Engine, die Chrome verwendet.
  • (KHTML, like Gecko): Zeigt Kompatibilität mit den Layout-Engines KHTML und Gecko.
  • Chrome/127.0.0.0: Gibt den Browsernamen und die Version an.
  • Safari/537.36: Weist auf Kompatibilität mit Safari hin.

Der User-Agent-Header hilft dabei zu bestimmen, ob eine Anfrage von einem vertrauenswürdigen Browser oder von automatisierter Software stammt.

Web-Scraping-Bots verwenden oft Standard- oder Nicht-Browser-User-Agents, wodurch sie zu leichten Zielen für Anti-Bot-Systeme werden. Diese Systeme analysieren den User-Agent-Header, um echte Nutzer von Bots zu unterscheiden. Erfahren Sie mehr über User Agents für Web-Scraping.

Was ist der Node.js-Standard-User-Agent?

Seit Version 18 enthält Node.js fetch() als integrierte Implementierung der Fetch API. Dies ist der empfohlene Weg, um HTTP-Anfragen in Node.js ohne externe Abhängigkeiten auszuführen. Erfahren Sie mehr in unserem Leitfaden zu HTTP-Anfragen in Node.js mit Fetch API.

Wie die meisten HTTP-Clients setzt fetch() automatisch einen standardmäßigen User-Agent-Header. Dasselbe Verhalten tritt in der Python-requests-Bibliothek auf.

Standardmäßig setzt fetch() in Node.js die folgende User-Agent-Zeichenkette:

node

Sie können den Standard-User-Agent überprüfen, den fetch() setzt, indem Sie eine GET-Anfrage an httpbin.io/user-agent stellen. Dieser Endpunkt gibt den User-Agent-Header der eingehenden Anfrage zurück, sodass Sie den User Agent identifizieren können, den ein HTTP-Client verwendet.

Um dies zu testen, erstellen Sie ein Node.js-Skript, definieren Sie eine async-Funktion und verwenden Sie fetch(), um die Anfrage auszuführen:

async function getFetchDefaultUserAgent() {

// make an HTTP request to the HTTPBin endpoint

// to get the user agent

const response = await fetch("https://httpbin.io/user-agent");

// read the default user agent from the response

// and print it

const data = await response.json();

console.log(data);

}

getFetchDefaultUserAgent();

Führen Sie den obigen JavaScript-Code aus, und Sie erhalten die folgende Zeichenkette:

{ 'user-agent': 'node' }

Standardmäßig setzt fetch() in Node.js den User-Agent auf node, was sich deutlich von Browser-User-Agents unterscheidet. Dies kann Anti-Bot-Systeme auslösen.

Anti-Bot-Lösungen erkennen ungewöhnliche User Agents und markieren solche Anfragen als Bots, was zu Sperren führt. Das Ändern des standardmäßigen Node.js-User-Agent hilft, eine Erkennung zu vermeiden.

How to Change the Node.js User Agent Using the Fetch API

Die Spezifikation der Fetch API umfasst keine integrierte Methode zum Ändern des User-Agent. Da es sich jedoch lediglich um einen HTTP-Header handelt, können Sie seinen Wert über die fetch()-Header-Optionen anpassen.

Set a User Agent Locally

fetch() unterstützt die Anpassung von Headern über die Option headers. Verwenden Sie diese, um den User-Agent-Header beim Ausführen einer spezifischen HTTP-Anfrage wie folgt zu setzen:

const response = await fetch("https://httpbin.io/user-agent", {

headers: {

"User-Agent":

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

},

});

Fügen Sie alles zusammen, und Sie erhalten:

async function getFetchUserAgent() {

// make an HTTP request to HTTPBin

// with a custom user agent

const response = await fetch("https://httpbin.io/user-agent", {

headers: {

"User-Agent":

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

},

});

// read the default user agent from the response

// and print it

const data = await response.json();

console.log(data);

}

getFetchUserAgent();

Starten Sie das obige Skript, und diesmal lautet das Ergebnis:

{

'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36'

}

Set a User Agent Globally

Das Setzen des User-Agent pro Anfrage ist zwar einfach, kann jedoch zu wiederholendem Code führen. Allerdings unterstützt die fetch()-API derzeit keine globalen Überschreibungen ihrer Standardeinstellungen.

Als Workaround können Sie eine Wrapper-Funktion erstellen, um fetch() mit Ihren gewünschten Konfigurationen anzupassen:

function customFetch(url, options = {}) {

// custom headers

const customHeaders = {

"User-Agent":

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

...options.headers, // merge with any other headers passed in the options

};

const mergedOptions = {

...options,

headers: customHeaders,

};

return fetch(url, mergedOptions);

}

Sie können nun eine HTTP-Anfrage mit einem benutzerdefinierten User Agent stellen, indem Sie customFetch() statt fetch() aufrufen:

const response = await customFetch("https://httpbin.io/user-agent");

Das vollständige Node.js-Skript lautet:

function customFetch(url, options = {}) {

// add a custom user agent header

const customHeaders = {

"User-Agent":

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

...options.headers, // merge with any other headers passed in the options

};

const mergedOptions = {

...options,

headers: customHeaders,

};

return fetch(url, mergedOptions);

}

async function getFetchUserAgent() {

// make an HTTP request to HTTPBin

// through the custom fetch wrapper

const response = await customFetch("https://httpbin.io/user-agent");

// read the default user agent from the response

// and print it

const data = await response.json();

console.log(data);

}

getFetchUserAgent();

Starten Sie das obige Node.js-Skript, und es gibt Folgendes aus:

{

'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36'

}

User-Agent-Rotation in Node.js implementieren

Das bloße Ersetzen des standardmäßigen User-Agent durch eine Browser-Zeichenkette umgeht die Anti-Bot-Erkennung möglicherweise nicht. Wenn mehrere Anfragen von derselben IP-Adresse mit demselben User Agent stammen, können Anti-Scraping-Systeme die Aktivität weiterhin als automatisiert markieren.

Um das Erkennungsrisiko in Node.js zu reduzieren, sollten Sie Variabilität in Ihre Anfragen einführen. Eine effektive Methode ist User-Agent-Rotation, bei der sich der User-Agent-Header bei jeder Anfrage ändert. Dadurch wirken Ihre Anfragen so, als kämen sie von unterschiedlichen Browsern, was die Wahrscheinlichkeit verringert, blockiert zu werden.

Lassen Sie uns User-Agent-Rotation in Node.js implementieren.

Schritt #1: Eine Liste von User Agents abrufen

Besuchen Sie eine Website wie WhatIsMyBrowser.com und füllen Sie eine Liste mit einigen gültigen User-Agent-Werten:

const userAgents = [

"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",

"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0",

"Mozilla/5.0 (Macintosh; Intel Mac OS X 14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15",

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

// other user agents...

];

Tip:

Je mehr echte User-Agent-Zeichenketten dieses Array enthält, desto besser ist es, um die Anti-Bot-Erkennung zu vermeiden.

Schritt #2: Zufällig einen User Agent auswählen

Erstellen Sie eine Funktion, die zufällig eine User-Agent-Zeichenkette aus der Liste auswählt und zurückgibt:

function getRandomUserAgent() {

const userAgents = [

// user agents omitted for brevity...

];

// return a user agent randomly

// extracted from the list

return userAgents[Math.floor(Math.random() * userAgents.length)];

}

Sehen wir uns an, was in dieser Funktion passiert:

  • Math.random() erzeugt eine Zufallszahl zwischen 0 und 1
  • Diese Zahl wird dann mit der Länge des userAgents-Arrays multipliziert.
  • Math.floor() rundet die resultierende Zahl ab auf die größte ganze Zahl, die kleiner oder gleich dieser Zahl ist.
  • Die resultierende Zahl aus den vorherigen Operationen entspricht einem zufällig erzeugten Index, der von 0 bis userAgents.length - 1 reicht.
  • Der Index wird dann verwendet, um einen zufälligen User Agent aus dem Array der User Agents zurückzugeben.

Jedes Mal, wenn Sie die Funktion getRandomUserAgent() aufrufen, erhalten Sie sehr wahrscheinlich einen anderen User Agent.

Schritt #3: Die HTTP-Anfrage mit einem zufälligen User Agent ausführen

Um User-Agent-Rotation in Node.js mit fetch() zu implementieren, setzen Sie den User-Agent-Header auf den Wert aus der Funktion getRandomUserAgent():

const response = await fetch("https://httpbin.io/user-agent", {

headers: {

"User-Agent": getRandomUserAgent(),

},

});

Die über die Fetch API ausgeführte HTTP-Anfrage hat nun einen zufälligen User Agent.

Schritt #4: Alles zusammenführen

Fügen Sie die Snippets der vorherigen Schritte in ein Node.js-Skript ein und kapseln Sie anschließend die Logik zum Ausführen einer fetch()-Anfrage in eine async-Funktion.

So sollte Ihr finales Node.js-Skript zur User-Agent-Rotation aussehen:

function getRandomUserAgent() {

const userAgents = [

"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",

"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0",

"Mozilla/5.0 (Macintosh; Intel Mac OS X 14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15",

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

// other user agents...

];

// return a user agent randomly

// extracted from the list

return userAgents[Math.floor(Math.random() * userAgents.length)];

}

async function getFetchUserAgent() {

// make an HTTP request with a random user agent

const response = await fetch("https://httpbin.io/user-agent", {

headers: {

"User-Agent": getRandomUserAgent(),

},

});

// read the default user agent from the response

// and print it

const data = await response.json();

console.log(data);

}

getFetchUserAgent();

Führen Sie das Skript 3 oder 4 Mal aus. Statistisch gesehen sollten Sie unterschiedliche User-Agent-Antworten wie unten sehen:

different user agent responses

Dies zeigt, dass die User-Agent-Rotation effektiv funktioniert.

Et voilà! Sie beherrschen nun das Setzen von User Agents in Node.js mit der Fetch API.

Fazit

Die Implementierung von User-Agent-Rotation in Node.js hilft dabei, einfache Anti-Scraping-Systeme zu umgehen. Dennoch können fortgeschrittenere Systeme Ihre automatisierten Anfragen weiterhin erkennen und blockieren. Um IP-Sperren zu vermeiden, ziehen Sie Web Scraper API in Betracht, das Anti-Scraping-Maßnahmen durch Funktionen wie IP- und User-Agent-Rotation effektiv umgeht und Web-Scraping einfacher macht als je zuvor.

Melden Sie sich jetzt an und starten Sie noch heute Ihre kostenlose Testphase!

About

Setzen, ändern und rotieren Sie User-Agents in Node.js, um die Anti-Bot-Erkennung zu umgehen und den Erfolg beim Web-Scraping zu verbessern.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published