Skip to content
Beginner / 7 min read

So verwenden Sie Dataimpulse-Residential-Proxys mit Node.js und Axios für Web Scraping (Einsteigerleitfaden für Windows, macOS und Linux)

Eine einsteigerfreundliche Copy-and-paste-Anleitung, um Node.js-Anfragen über Dataimpulse Pay-as-you-go-Residential-Proxys mit Axios und Cheerio zu leiten, einschließlich Exit-IP-Überprüfung, Wiederholungsversuchen, Parallelitätslimits und einer SOCKS5-Variante.

Windows macOS HTTP(S) Web Scraping

Überblick

Dataimpulse ist ein Pay-as-you-go-Proxy-Anbieter, der Residential- und Mobile-IPs aus einem Pool von über 90 Mio. Adressen über HTTP und SOCKS5 anbietet. Da die Abrechnung auf dem tatsächlich genutzten Datenverkehr basiert und nicht auf einem festen Monatsplan, eignet er sich für Web Scraping mit hohem Volumen und Datenerfassung in großem Umfang, bei der die Nutzung stoßweise anfällt.

In diesem Tutorial werden Node.js-Anfragen über einen Dataimpulse-Residential-Endpunkt mit Axios und Cheerio geleitet und das Skript anschließend mit Wiederholungsversuchen und einer Parallelitätsgrenze gehärtet. Der Code verhält sich unter Windows, macOS und Linux identisch; nur die Shell-Befehle zum Festlegen von Umgebungsvariablen unterscheiden sich. Dasselbe Muster funktioniert bei jedem Anbieter, der einen Gateway-Host, einen Port und Benutzername/Passwort bereitstellt.

Am Ende können Sie:

  1. die für proxyfähiges Scraping benötigten Node.js-Pakete installieren.
  2. Dataimpulse-Zugangsdaten aus Ihren Quelldateien heraushalten.
  3. überprüfen, dass Anfragen über den Proxy hinausgehen.
  4. eine Seite mit Cheerio scrapen und parsen.
  5. Wiederholungsversuche, Backoff und eine Parallelitätsgrenze hinzufügen.
  6. denselben Client von HTTP auf SOCKS5 umstellen.

Was Sie benötigen

  • Node.js 18 oder neuer mit npm
  • Ein Dataimpulse-Konto mit Pay-as-you-go-Guthaben
  • Den Gateway-Host, den Port und Benutzername/Passwort aus Ihrem Dataimpulse-Dashboard
  • Eine Zielseite, die Sie scrapen dürfen

Endpunkttyp auswählen

Endpunkt Am besten für Node.js-Agent-Paket
HTTP(S)-Proxy Axios, Fetch und die meisten HTTP-Scraping-Bibliotheken https-proxy-agent
SOCKS5 Tools, die SOCKS erwarten, oder ein Agent für den gesamten ausgehenden Datenverkehr socks-proxy-agent

Beginnen Sie mit dem HTTP-Endpunkt, es sei denn, eine Bibliothek akzeptiert keine Proxy-Konfiguration.

Schritte

1. Projekt erstellen

mkdir dataimpulse-axios-scraper
cd dataimpulse-axios-scraper
npm init -y

2. Abhängigkeiten installieren

npm install axios cheerio https-proxy-agent

Fügen Sie den SOCKS5-Agent nur hinzu, wenn Sie Schritt 7 verwenden möchten:

npm install socks-proxy-agent

3. Dataimpulse-Zugangsdaten als Umgebungsvariablen festlegen

Wenn Sie Zugangsdaten aus Quelldateien heraushalten, gelangen sie nicht in ein Repository oder einen geteilten Screenshot. Kopieren Sie die Werte für Host, Port, Benutzername und Passwort aus Ihrem Dataimpulse-Dashboard.

macOS und Linux:

export PROXY_HOST="ihr-gateway-host"
export PROXY_PORT="ihr-gateway-port"
export PROXY_USER="ihr-benutzername"
export PROXY_PASS="ihr-passwort"

Windows PowerShell:

$env:PROXY_HOST = "ihr-gateway-host"
$env:PROXY_PORT = "ihr-gateway-port"
$env:PROXY_USER = "ihr-benutzername"
$env:PROXY_PASS = "ihr-passwort"

Diese Werte gelten nur für die aktuelle Terminalsitzung. Wenn Ihr Passwort @, : oder / enthält, kodiert das folgende Skript es mit encodeURIComponent URL-konform, sodass Sie es unverändert einfügen können.

4. Exit-IP bestätigen

Erstellen Sie eine Datei namens check-ip.js:

const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const proxyUrl = `http://${process.env.PROXY_USER}:${encodeURIComponent(process.env.PROXY_PASS)}@${process.env.PROXY_HOST}:${process.env.PROXY_PORT}`;

const client = axios.create({
  httpsAgent: new HttpsProxyAgent(proxyUrl),
  proxy: false,
  timeout: 20000,
});

(async () => {
  const { data } = await client.get('https://api.ipify.org?format=json');
  console.log('Exit IP:', data.ip);
})();

Führen Sie es einige Male aus:

node check-ip.js

Wenn das Gateway die Exit-IP rotiert, sehen Sie bei jedem Durchlauf eine andere Adresse, was für Residential-Datenverkehr normal ist. Wenn mehrere Anfragen von derselben Adresse ausgehen sollen, verwenden Sie das in Ihrem Dataimpulse-Dashboard dokumentierte Session- oder Sticky-Parameter-Format, anstatt zu versuchen, eine IP im Skript festzunageln. Das Festlegen von proxy: false ist beabsichtigt: Der explizite Agent übernimmt das Tunneling, und die aktivierte automatische Proxy-Erkennung von Axios kann damit kollidieren.

5. Eine Seite scrapen und parsen

Erstellen Sie scrape.js. Diese Version fügt einen aussagekräftigen User-Agent, einen Accept-Language-Header und einen Wiederholungshelfer hinzu:

const axios = require('axios');
const { load } = require('cheerio');
const { HttpsProxyAgent } = require('https-proxy-agent');

const proxyUrl = `http://${process.env.PROXY_USER}:${encodeURIComponent(process.env.PROXY_PASS)}@${process.env.PROXY_HOST}:${process.env.PROXY_PORT}`;

const client = axios.create({
  httpsAgent: new HttpsProxyAgent(proxyUrl),
  proxy: false,
  timeout: 20000,
  headers: {
    'User-Agent': 'Mozilla/5.0 (compatible; ProxyScoutExample/1.0)',
    'Accept-Language': 'en-US,en;q=0.9',
  },
});

async function getWithRetry(url, attempts = 3) {
  for (let i = 1; i <= attempts; i++) {
    try {
      return await client.get(url);
    } catch (error) {
      const status = error.response && error.response.status;
      const retryable = !status || status === 429 || status >= 500;
      if (!retryable || i === attempts) throw error;
      const backoff = 1000 * 2 ** (i - 1);
      console.warn(`Attempt ${i} failed (${status || error.code}); retrying in ${backoff} ms`);
      await new Promise((resolve) => setTimeout(resolve, backoff));
    }
  }
}

(async () => {
  const { data: html } = await getWithRetry('https://example.com/');
  const $ = load(html);
  console.log('Title:', $('title').text().trim());
  $('a').slice(0, 5).each((index, element) => {
    console.log('Link:', $(element).attr('href'));
  });
})();
node scrape.js

Authentifizierungsfehler (HTTP 407) und die meisten 4xx-Antworten werden als nicht wiederholbar behandelt, da die Wiederholung derselben Anfrage mit denselben Zugangsdaten normalerweise dasselbe Ergebnis liefert. Vorübergehende Netzwerkfehler, 429-Antworten und 5xx-Antworten werden mit exponentiellem Backoff wiederholt.

6. Eine Parallelitätsgrenze hinzufügen, anstatt alles auf einmal abzufeuern

Das rotierende Gateway übernimmt IP-Änderungen für Sie, sodass das Hauptrisiko für Ihren Job darin besteht, ein einzelnes Ziel zu schnell zu bombardieren. Verarbeiten Sie URLs in kleinen Batches, und verringern Sie die Batch-Größe, wenn 403- oder 429-Antworten auftreten:

async function scrapeAll(urls, concurrency = 4) {
  const results = [];
  for (let i = 0; i < urls.length; i += concurrency) {
    const batch = urls.slice(i, i + concurrency);
    const settled = await Promise.allSettled(batch.map((url) => getWithRetry(url)));
    results.push(...settled);
  }
  return results;
}

Beginnen Sie bei einem neuen Ziel mit einer Parallelität von 2 bis 4, beobachten Sie die Fehlerrate und skalieren Sie erst dann hoch. Ein langsamerer Durchlauf, der abgeschlossen wird, ist günstiger als ein schneller Durchlauf, der blockiert wird, besonders bei Pay-as-you-go-Abrechnung, bei der fehlgeschlagene Anfragen weiterhin Datenverkehr verbrauchen.

7. Optional: Denselben Client auf SOCKS5 umstellen

Wenn eine Bibliothek oder ein CLI-Tool nur SOCKS akzeptiert, tauschen Sie den Agent aus. Verwenden Sie den SOCKS5-Port aus Ihrem Dataimpulse-Dashboard, nicht den HTTP-Port:

const { SocksProxyAgent } = require('socks-proxy-agent');

const socksUrl = `socks5://${process.env.PROXY_USER}:${encodeURIComponent(process.env.PROXY_PASS)}@${process.env.PROXY_HOST}:${process.env.PROXY_PORT}`;
const agent = new SocksProxyAgent(socksUrl);

const client = axios.create({
  httpAgent: agent,
  httpsAgent: agent,
  proxy: false,
  timeout: 20000,
});

Wenn Sie denselben Agent sowohl httpAgent als auch httpsAgent zuweisen, bleiben einfache HTTP- und HTTPS-Ziele konsistent, was wichtig ist, wenn ein Scrape Weiterleitungen über beide Schemata hinweg folgt.

Fehlerbehebung

Symptom Wahrscheinliche Ursache Lösung
407 Proxy Authentication Required Falscher oder fehlender Benutzername/Passwort Prüfen Sie die Dashboard-Zugangsdaten erneut und bestätigen Sie die URL-Kodierung von Sonderzeichen
ECONNREFUSED oder sofortiger Timeout beim Verbinden Falscher Port oder HTTP-Port für eine SOCKS5-Anfrage verwendet Stimmen Sie den Port auf das ausgewählte Protokoll ab
HTTP-URLs funktionieren, HTTPS-URLs schlagen fehl Axios verwendet seine integrierte Proxy-Behandlung statt des Agents Verwenden Sie https-proxy-agent und setzen Sie proxy: false
Häufige 403 oder 429 von der Zielseite Anfragefrequenz für diesen Host zu hoch Reduzieren Sie die Parallelität auf 1 oder 2, erhöhen Sie den Backoff, halten Sie die Header realistisch
Anfragen funktionieren im Browser, schlagen aber in Node fehl Browser und Terminal haben unterschiedliche Proxy-Einstellungen Exportieren Sie die Umgebungsvariablen im Terminal, in dem das Skript ausgeführt wird, erneut
Zertifikats- oder TLS-Warnungen erscheinen Abgefangenes oder nicht übereinstimmendes TLS Deaktivieren Sie nicht die Zertifikatsvalidierung; überprüfen Sie die Ziel-URL und die Proxy-Konfiguration

Zusammenfassung

Sie haben ein Node.js-Projekt eingerichtet, das Axios-Anfragen über einen Dataimpulse-Residential-Proxy sendet, die Exit-IP überprüft, HTML mit Cheerio geparst und Wiederholungsversuche, Backoff und eine Parallelitätsobergrenze hinzugefügt. Da das Gateway die Exits für Sie rotiert, gehört der Entwicklungsaufwand in Taktung, Fehlerbehandlung und Observability statt in manuelles IP-Wechseln. Bestätigen Sie für einen ersten Durchlauf die Exit-IP, scrapen Sie eine einzelne Seite und erhöhen Sie dann die Parallelität schrittweise, während Sie Ihre Fehlerrate und Ihren Datenverkehrsverbrauch beobachten. Respektieren Sie beim Sammeln von Daten stets die Nutzungsbedingungen der Zielseite, robots-Direktiven und geltendes Recht.

Weiterführende Lektüre auf ProxyScout.net: rotierende Residential-Proxys im großen Maßstab, Python-basiertes Scraping mit Dataimpulse und Konfigurieren von Dataimpulse-Proxys mit Proxifier unter Windows.