Comment utiliser les proxys résidentiels Dataimpulse avec Node.js et Axios pour le scraping web (guide débutant pour Windows, macOS et Linux)
Un guide pas à pas convivial pour débutants, prêt à copier-coller, pour acheminer les requêtes Node.js via les proxys résidentiels Dataimpulse à paiement à l'usage avec Axios et Cheerio, incluant la vérification de l'IP de sortie, les nouvelles tentatives, les limites de concurrence et une variante SOCKS5.
Aperçu
Dataimpulse est un fournisseur de proxys à paiement à l'usage (pay-as-you-go) proposant des IP résidentielles et mobiles depuis un pool de plus de 90 millions d'adresses via HTTP et SOCKS5. Comme la facturation suit le trafic que vous utilisez réellement plutôt qu'un forfait mensuel fixe, il convient au scraping web à haut volume et à la collecte de données à grande échelle lorsque l'usage est irrégulier.
Ce tutoriel achemine les requêtes Node.js via un endpoint résidentiel Dataimpulse en utilisant Axios et Cheerio, puis renforce le script avec des nouvelles tentatives et un plafond de concurrence. Le code se comporte de manière identique sous Windows, macOS et Linux ; seules les commandes shell pour définir les variables d'environnement diffèrent. Le même modèle fonctionne avec tout fournisseur qui fournit un hôte de passerelle, un port et un nom d'utilisateur/mot de passe.
À la fin, vous serez en mesure de :
- Installer les paquets Node.js nécessaires au scraping conscient des proxys.
- Garder les identifiants Dataimpulse hors de vos fichiers source.
- Vérifier que les requêtes sortent via le proxy.
- Scraper et analyser une page avec Cheerio.
- Ajouter des nouvelles tentatives, un backoff et une limite de concurrence.
- Basculer le même client de HTTP vers SOCKS5.
Ce dont vous avez besoin
- Node.js 18 ou plus récent avec npm
- Un compte Dataimpulse avec du crédit à l'usage
- L'hôte de passerelle, le port et le nom d'utilisateur/mot de passe depuis votre tableau de bord Dataimpulse
- Une page cible que vous êtes autorisé à scraper
Choisir un type d'endpoint
| Endpoint | Idéal pour | Paquet d'agent Node.js |
|---|---|---|
| Proxy HTTP(S) | Axios, Fetch et la plupart des bibliothèques de scraping HTTP | https-proxy-agent |
| SOCKS5 | Outils qui attendent SOCKS, ou un seul agent pour tout le trafic sortant | socks-proxy-agent |
Commencez par l'endpoint HTTP, sauf si une bibliothèque refuse d'accepter une configuration de proxy.
Étapes
1. Créer le projet
mkdir dataimpulse-axios-scraper
cd dataimpulse-axios-scraper
npm init -y
2. Installer les dépendances
npm install axios cheerio https-proxy-agent
Ajoutez l'agent SOCKS5 uniquement si vous prévoyez d'utiliser l'étape 7 :
npm install socks-proxy-agent
3. Définir vos identifiants Dataimpulse comme variables d'environnement
Garder les identifiants hors des fichiers source les empêche de fuiter dans un dépôt ou une capture d'écran partagée. Copiez les valeurs d'hôte, de port, de nom d'utilisateur et de mot de passe depuis votre tableau de bord Dataimpulse.
macOS et Linux :
export PROXY_HOST="your-gateway-host"
export PROXY_PORT="your-gateway-port"
export PROXY_USER="your-username"
export PROXY_PASS="your-password"
Windows PowerShell :
$env:PROXY_HOST = "your-gateway-host"
$env:PROXY_PORT = "your-gateway-port"
$env:PROXY_USER = "your-username"
$env:PROXY_PASS = "your-password"
Ces valeurs s'appliquent uniquement à la session de terminal en cours. Si votre mot de passe contient @, : ou /, le script ci-dessous l'encode en URL avec encodeURIComponent, vous pouvez donc le coller tel quel.
4. Confirmer l'IP de sortie
Créez un fichier nommé 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);
})();
Exécutez-le plusieurs fois :
node check-ip.js
Si la passerelle fait tourner l'IP de sortie, vous verrez une adresse différente à chaque exécution, ce qui est le comportement normal pour le trafic résidentiel. Si vous avez besoin que plusieurs requêtes partent de la même adresse, utilisez le format de paramètre de session ou sticky documenté dans votre tableau de bord Dataimpulse au lieu d'essayer d'épingler une IP dans le script. Définir proxy: false est délibéré : l'agent explicite gère la tunnélisation, et laisser la détection automatique du proxy d'Axios activée peut entrer en conflit avec lui.
5. Scraper une page et l'analyser
Créez scrape.js. Cette version ajoute un User-Agent descriptif, un en-tête Accept-Language et un assistant de nouvelle tentative :
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
Les échecs d'authentification (HTTP 407) et la plupart des réponses 4xx sont traités comme non réessayables, car répéter la même requête avec les mêmes identifiants reproduit généralement le même résultat. Les erreurs réseau transitoires, les réponses 429 et les réponses 5xx sont réessayées avec un backoff exponentiel.
6. Ajouter une limite de concurrence au lieu de tout lancer en même temps
La passerelle rotative gère les changements d'IP pour vous, donc le principal risque pour votre tâche est de marteler une seule cible trop rapidement. Traitez les URL par petits lots et réduisez la taille du lot si vous commencez à voir des réponses 403 ou 429 :
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;
}
Commencez avec une concurrence de 2 à 4 pour une nouvelle cible, surveillez le taux d'échec, et n'augmentez qu'ensuite. Une exécution plus lente qui se termine est moins coûteuse qu'une exécution rapide qui se fait bloquer, en particulier avec une facturation à l'usage où les requêtes échouées consomment quand même du trafic.
7. Facultatif : basculer le même client vers SOCKS5
Si une bibliothèque ou un outil CLI n'accepte que SOCKS, changez d'agent. Utilisez le port SOCKS5 de votre tableau de bord Dataimpulse, pas le port HTTP :
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,
});
Assigner le même agent à la fois à httpAgent et httpsAgent maintient la cohérence des cibles HTTP et HTTPS simples, ce qui importe lorsqu'un scraping suit des redirections à travers les deux schémas.
Dépannage
| Symptôme | Cause probable | Correctif |
|---|---|---|
407 Proxy Authentication Required |
Nom d'utilisateur/mot de passe incorrect ou manquant | Revérifiez les identifiants du tableau de bord et confirmez l'encodage URL des caractères spéciaux |
ECONNREFUSED ou expiration immédiate à la connexion |
Mauvais port, ou port HTTP utilisé pour une requête SOCKS5 | Faites correspondre le port au protocole que vous avez sélectionné |
| Les URL HTTP fonctionnent, les URL HTTPS échouent | Axios utilise sa gestion intégrée du proxy au lieu de l'agent | Utilisez https-proxy-agent et définissez proxy: false |
403 ou 429 fréquents depuis le site cible |
Taux de requêtes trop élevé pour cet hôte | Réduisez la concurrence à 1 ou 2, augmentez le backoff, gardez des en-têtes réalistes |
| Les requêtes réussissent dans le navigateur mais échouent dans Node | Le navigateur et le terminal ont des paramètres de proxy différents | Réexportez les variables d'environnement dans le terminal exécutant le script |
| Des avertissements de certificat ou TLS apparaissent | TLS intercepté ou non concordant | Ne désactivez pas la validation des certificats ; vérifiez l'URL cible et la configuration du proxy |
Résumé
Vous avez configuré un projet Node.js qui envoie des requêtes Axios via un proxy résidentiel Dataimpulse, vérifié l'IP de sortie, analysé du HTML avec Cheerio, et ajouté des nouvelles tentatives, un backoff et un plafond de concurrence. Comme la passerelle gère la rotation des sorties pour vous, l'effort d'ingénierie se situe dans le rythme, la gestion des erreurs et l'observabilité plutôt que dans le changement manuel d'IP. Pour une première exécution, confirmez l'IP de sortie, scrapez une seule page, puis augmentez progressivement la concurrence en surveillant votre taux d'échec et votre consommation de trafic. Respectez toujours les conditions d'utilisation du site cible, les directives robots et la législation applicable lors de la collecte de données.
Lectures associées sur ProxyScout.net : proxys résidentiels rotatifs à grande échelle, scraping basé sur Python avec Dataimpulse, et configuration des proxys Dataimpulse avec Proxifier sous Windows.