Passer au contenu

Contourner les blocs de Web Scraping avec Node-Unblocker

Bonjour!

Vous avez donc créé un superbe web scraper avec Node.js, mais les sites continuent de bloquer vos requêtes ? Nous y avons tous été!

Dans ce guide complet de plus de 3000 XNUMX mots, vous apprendrez comment tirer parti de Node-Unblocker pour éviter les blocages et supprimer n'importe quel site.

Qu’est-ce que Node-Unblocker et pourquoi l’utiliser ?

Node-Unblocker est un module Node.js open source qui vous permet d'exécuter un serveur proxy avec des middlewares personnalisés pour modifier les demandes et les réponses.

Voici quelques-unes des principales raisons pour lesquelles Node-Unblocker est si utile pour le web scraping :

  • Évitez les blocages IP – En acheminant votre scraper via des proxys, vous pouvez éviter de vous faire bannir de l’IP en raison d’un trop grand nombre de requêtes provenant d’une même adresse IP. Ceci est essentiel pour réussir un grattage à grande échelle.

  • Contourner les blocs géographiques – De nombreux sites restreignent l’accès au contenu en fonction de l’emplacement. Avec Node-Unblocker, vous pouvez utiliser un proxy via des adresses IP dans des régions spécifiques pour contourner ces blocages.

  • Supprimer les sites JavaScript – Node-Unblocker prend en charge les websockets proxy, ce qui permet de supprimer des sites s'appuyant fortement sur JavaScript. De nombreux scrapers ont du mal avec les sites JS.

  • Modifier les demandes – Les middlewares personnalisés vous permettent de modifier les en-têtes de requête pour imiter les navigateurs, gérer automatiquement la connexion, encoder les caractères et bien plus encore.

  • Transformer les réponses – Remodelez et traitez les réponses à l’aide des middlewares de réponse avant qu’elles n’atteignent votre code scraper.

  • Léger et rapide – Node-Unblocker est entièrement construit en JavaScript, il est donc ultra-rapide et facile à intégrer dans votre scraper JS.

Selon des enquêtes, plus de 60 % des sites Web utilisent désormais des mesures anti-scraping telles que le blocage des adresses IP, les CAPTCHA et la détection des robots. Node-Unblocker est votre arme secrète pour surmonter ces obstacles.

Installation et configuration de Node-Unblocker

Voyons d'abord comment installer et configurer Node-Unblocker. Nous allons également créer un exemple de serveur proxy pour l'essayer.

Étape 1 : Installer Node-Unblocker

En supposant que vous ayez déjà un projet Node.js, installez Node-Unblocker et Express :

npm install node-unblocker express

Cela ajoutera les deux modules à votre package.json.

Étape 2 : initialiser le serveur Express

Dans votre fichier serveur, initialisez une application Express et une instance Node-Unblocker :

// server.js

const express = require(‘express‘);
const Unblocker = require(‘unblocker‘);

const app = express();
const unblocker = Unblocker(); 

// Node-Unblocker is now ready to use!

Étape 3 : ajouter une route proxy

Pour les requêtes proxy, ajoutez une route qui redirige via le middleware Unblocker :

app.get(‘/scrape‘, (req, res) => {
  const url = req.query.url;

  res.redirect(`/proxy/${url}`); 
});

Nous pouvons désormais adresser des demandes à /scrape?url=http://example.com et Node-Unblocker les proxy.

Étape 4 : Démarrer le serveur

Enfin, démarrez le serveur proxy :

const PORT = 3000;

app.listen(PORT, () => {
  console.log(`Proxy server running on port ${PORT}`);
});

Notre serveur Node-Unblocker de base est maintenant opérationnel !

Voyons ensuite comment nous pouvons l'exploiter dans nos scrapers Web.

Utilisation de Node-Unblocker pour le Web Scraping

Voici quelques-uns des cas d'utilisation les plus courants de l'utilisation de Node-Unblocker pour supprimer des sites :

Proxies rotatives

L’un des plus grands défis du web scraping est d’éviter d’être bloqué par le site cible après avoir effectué trop de requêtes à partir d’une seule adresse IP.

Node-Unblocker fournit un moyen simple de mettre en œuvre une solution de proxy rotatif.

Les étapes sont les suivantes:

  1. Accédez à un pool de serveurs proxy – Vous pouvez utiliser un fournisseur comme Luminati or oxylabs pour obtenir des centaines d'adresses IP proxy.

  2. Ajoutez les proxys à une liste – Par exemple :

const proxies = [
  ‘http://proxy1.com‘,
  ‘http://proxy2.com‘,
  // etc
];
  1. Avant chaque requête, sélectionnez aléatoirement un proxy :
function getRandomProxy() {
  return proxies[Math.floor(Math.random() * proxies.length)];
}
  1. Effectuez la demande de web scraping via le proxy :
const proxy = getRandomProxy();

request(`${proxy}/targetUrl`);

En faisant tourner les proxys à chaque requête, vous pouvez gratter à grande échelle sans être bloqué. Conseil de pro : utilisez un pool de proxy au moins 10 fois supérieur à votre taux de requêtes par seconde.

Contourner les blocs géographiques

Certains sites Web restreignent l'accès au contenu en fonction de la situation géographique du visiteur.

Par exemple, le site http://usanews.com autorise uniquement le trafic provenant des adresses IP des États-Unis. En utilisant Node-Unblocker, nous pouvons facilement contourner cette restriction.

Les étapes sont les suivantes:

  1. Obtenez des adresses IP proxy résidentielles pour votre région cible, par exemple les États-Unis.

  2. Ajoutez ces proxys spécifiques à une région à Node-Unblocker.

  3. Acheminez le trafic de votre scraper via Node-Unblocker.

Désormais, toutes les demandes provenant de la région requise apparaîtront et accéderont avec succès au contenu géo-bloqué !

Cette technique fonctionne également pour simuler le trafic mobile en provenance d'un pays spécifique, ce qui est utile pour supprimer les applications mobiles ciblées par région.

Scraper des sites Web JavaScript

Les sites modernes s'appuient fortement sur JavaScript pour afficher le contenu. Les scrapers conventionnels qui téléchargent uniquement du HTML ont du mal à analyser ces pages interactives.

Heureusement, Node-Unblocker proxy les websockets par défaut, ce qui permet de scraper les sites JS :

// Enable websocket proxying
unblocker.listen().on(‘upgrade‘, unblocker.onUpgrade); 

// Make request and JS will execute
request(‘http://jsSite.com‘);  

Le site chargera et exécutera JS à la manière d’un véritable navigateur, permettant une extraction réussie des données.

Cependant, cela ne fonctionne bien que pour les sites JavaScript publics. Pour un rendu JS robuste, un outil comme Marionnettiste est recommandé à la place.

Application de middlewares de requêtes personnalisées

L'une des fonctionnalités les plus puissantes de Node-Unblocker réside dans ses middlewares personnalisés. Nous pouvons les utiliser pour modifier à la fois les demandes et les réponses.

Quelques exemples de la façon dont les middlewares de requêtes peuvent aider au web scraping :

Rotation des agents utilisateurs

De nombreux sites bloquent les scrapers qui envoient le même User-Agent à chaque requête. Nous pouvons le faire pivoter automatiquement :

// Randomly choose User-Agent 
unblocker.use((req, res) => {
  const userAgents = [‘UA1‘, ‘UA2‘, ‘UA3‘];

  req.headers[‘User-Agent‘] = userAgents[Math.floor(Math.random() * userAgents.length)];
});

Désormais, chaque requête aura un User-Agent différent empêchant cette tactique de blocage.

Connexion automatique

Pour les sites nécessitant une connexion, nous pouvons ajouter les informations d'authentification sans modifier notre code scraper :

unblocker.use((req, res) => {
  if (req.url.includes(‘mysite.com‘)) {
    req.headers[‘Authorization‘] = ‘Bearer xxx‘;
  }  
});

Toute demande sur le site connectera automatiquement l'utilisateur.

Encoder les caractères spéciaux

Certains sites bloquent les caractères étranges comme les emojis. Nous pouvons exécuter un encodage personnalisé sur les requêtes :

unblocker.use((req, res) => {
  req.url = encodeURI(req.url);

  // Encode headers, body etc
});

Cela permet à notre scraper d'utiliser des caractères spéciaux sans être bloqué.

Comme vous pouvez le constater, les possibilités avec les middlewares de requête sont infinies !

Gestion des réponses

Nous pouvons également transformer les données de réponse à l'aide des middlewares de réponse :

Analyser et extraire des données

Plutôt que de faire l'extraction de données dans notre scraper, nous pouvons le faire directement dans le middleware :

unblocker.use((req, res) => {
  const $ = cheerio.load(res.body);

  res.data = $(‘.result‘).text(); 
});

Désormais, notre scraper recevra les données extraites directement en enregistrant le code.

Filtrer les données sensibles

Certains sites renvoient des cookies, des en-têtes et d'autres métadonnées dont nous n'avons pas besoin. Nous pouvons nettoyer cela :

unblocker.use((req, res) => {

  // Remove unnecessary cookies
  res.headers[‘set-cookie‘] = []; 

  // Delete other unwanted headers
  delete res.headers[‘x-rate-limit‘];
});

Cela nous donne uniquement les données de réponse utiles.

Mettre en cache les requêtes courantes

Pour les sites avec des points de terminaison fréquemment consultés, nous pouvons créer un cache pour éviter d'atteindre les limites de débit :

// In-memory cache
const cache = {};

unblocker.use((req, res) => {
  if (cache[req.url]) {
    return cache[req.url];
  }

  cache[req.url] = res;
});

Désormais, les requêtes répétées seront traitées directement depuis le cache.

Comme vous pouvez le constater, les middlewares de réponse sont extrêmement puissants pour traiter les données directement dans Node-Unblocker avant qu'elles n'atteignent votre scraper.

Node-Unblocker vs autres proxys

Node-Unblocker fournit un proxy léger en cours de processus pour les scrapers Node.js. Cependant, il existe également des services proxy dédiés. Comparons les avantages et les inconvénients :

Débloqueur de nœuds

  • Avantages

    • Léger et rapide
    • Middleware personnalisable
    • S'intègre directement dans Node Scraper
  • Inconvénients

    • Besoin de gérer ses propres proxys
    • Capacités limitées
    • Non optimisé pour l'échelle

Luminati

  • Avantages

    • Énorme pool de proxy
    • Gestionnaire de proxy avancé
    • Conçu pour le web scraping
  • Inconvénients

    • Exagération pour les petits grattoirs
    • Outil séparé à intégrer

Proxy intelligent

  • Avantages

    • Plans de procuration abordables
    • IP dédiées disponibles
    • S'intègre via l'API REST
  • Inconvénients

    • Besoin d'un compte séparé
    • Personnalisation limitée

Pour le scraping de production à grande échelle, un service proxy commercial comme Luminati ou Smartproxy est fortement recommandé. Ils gèrent la gestion des proxys et facilitent l'intégration via des API.

Pour les grattoirs de petite et moyenne taille, Node-Unblocker offre une excellente option en cours de processus. La possibilité de le personnaliser selon les besoins le rend vraiment puissant.

Problèmes courants et comment les résoudre

Lorsque vous utilisez Node-Unblocker, voici quelques problèmes courants que vous pouvez rencontrer et comment les résoudre :

Site bloquant l'adresse IP de Node-Unblocker

Cela peut se produire si vous utilisez le même serveur Node-Unblocker pour trop de requêtes. La solution consiste à alterner fréquemment vos adresses IP proxy en amont qui alimentent Node-Unblocker.

Les Websockets ne fonctionnent pas

Assurez-vous que vous avez unblocker.listen().on(‘upgrade‘, unblocker.onUpgrade) dans votre code pour activer le proxy Websocket.

Trop de descripteurs de fichiers ouverts

Node-Unblocker peut atteindre la limite de fichiers ouverts lors du traitement de milliers de requêtes. Augmentez le nombre maximum de fichiers ouverts sous Linux ou utilisez un proxy inverse comme Nginx pour une meilleure gestion des sockets.

Erreurs lors du scraping de sites

Ajoutez le debug middleware vers Node-Unblocker pour enregistrer toutes les demandes. Cela permet d’identifier quelle requête exacte échoue.

Forte utilisation de la mémoire

Par défaut, Node-Unblocker met en mémoire tampon les corps de réponse, ce qui peut provoquer des pics. Utilisez le streaming ou désactivez la mise en mémoire tampon si nécessaire.

scrape() est lent

Node-Unblocker n'est pas optimisé pour un débit ultra élevé. Utilisez un service proxy dédié comme Smartproxy si vous avez besoin de maximiser la vitesse.

Ordre d'exécution du middleware

Gardez à l’esprit l’ordre d’exécution du middleware – Par exemple, le middleware de réponse s’exécute avant le middleware de requête au retour.

La configuration correcte de Node-Unblocker nécessite quelques essais et erreurs. Se référer au docs pour les options de configuration avancées.

Déployer Node-Unblocker à grande échelle

Pour exécuter Node-Unblocker en production, vous devez l'héberger correctement sur des serveurs conçus pour des charges élevées.

Voici une architecture recommandée :

Architecture du débloqueur de nœuds

Il comprend les éléments suivants:

  • Serveurs d'applications Node-Unblocker – Ceux-ci contiennent la logique principale de l’application proxy. Pour les charges élevées, utilisez au moins 2 à 4 serveurs.

  • Proxy inverse (Nginx) – Fait face à la flotte de Node-Unblocker et équilibre la charge entre eux. Gère également SSL et toute autre logique de routage périphérique.

  • Base de données – Pour stocker toutes les données d'application persistantes telles que les caches, les statistiques, etc. Redis fonctionne bien.

  • Serveurs proxy en amont – Les adresses IP proxy externes qui alimentent le trafic vers Node-Unblocker. Utilisez au moins 50 à 100+ proxys ici.

  • cloud Hosting – Utilisez un fournisseur comme AWS ou GCP pour gérer les serveurs, l'équilibrage de charge, le basculement et l'évolutivité.

Une architecture correcte d'un déploiement Node-Unblocker peut prendre en charge plus de 100,000 XNUMX requêtes par jour sans problème. Assurez-vous de tester le système à grande échelle avant le lancement.

Pour des charges encore plus importantes, utilisez un service proxy dédié comme Oxylabs, qui peut gérer facilement des millions de requêtes via son infrastructure proxy mondiale.

Meilleures pratiques pour un web scraping productif

Voici quelques conseils généraux pour maximiser le succès du web scraping via Node-Unblocker :

  • Utiliser des intervalles de temps aléatoires – Grattez les sites à intervalles aléatoires, et non à un rythme constant et fixe. Cela permet d’éviter les modèles de trafic susceptibles de déclencher des blocages.

  • Limiter les requêtes par IP – Limitez les requêtes Node-Unblocker par IP de proxy en amont à une limite raisonnable comme 5 RPM pour éviter de graver des IP.

  • Faire correspondre la géographie cible – Utilisez des adresses IP proxy provenant de la même région que l'audience de votre site cible. Cela permet d’éviter les blocages géolocalisés.

  • Déboguer avec journalisation – Implémentez la journalisation des demandes afin de pouvoir identifier et reproduire facilement les erreurs.

  • Apprendre des blocs – Lorsque vous êtes bloqué, étudiez l’approche de blocage exacte utilisée et ajustez votre stratégie pour l’éviter à l’avenir.

  • Rotation régulière des serveurs – Faites pivoter vos serveurs proxy et votre infrastructure tous les quelques mois pour actualiser toutes les adresses IP externes.

  • Utiliser les services proxy – La maintenance de votre propre infrastructure proxy est complexe. Tirez plutôt parti d’un service proxy d’entreprise pour plus de fiabilité.

Le web scraping peut certainement être un défi. Mais en exploitant intelligemment des outils tels que Node-Unblocker et en suivant les meilleures pratiques, vous pouvez extraire avec succès des données de pratiquement n'importe quel site.

Faits marquants

Voici les éléments clés que nous avons abordés dans ce guide complet de web scraping Node-Unblocker :

  • Node-Unblocker fournit un serveur proxy en cours pour acheminer les demandes de web scraping via
  • Il permet d'implémenter des fonctionnalités critiques telles que la rotation des proxys, les middlewares personnalisés et la prise en charge des websockets.
  • La configuration correcte de Node-Unblocker nécessite des essais et des erreurs – utilisez le débogage pour identifier les problèmes
  • Pour le scraping à grande échelle, un service proxy dédié comme Luminati ou Smartproxy est recommandé
  • Suivre les meilleures pratiques de web scraping permet d'éviter les blocages et d'extraire les données de manière fiable

Node-Unblocker est un outil polyvalent qui vous donne plus de contrôle sur la logique de proxy par rapport aux services externes. L'intégrer directement dans vos grattoirs ouvre des possibilités de niveau supérieur.

J'espère que ce guide a aidé à démystifier Node-Unblocker et comment il peut vous aider à récupérer et à faire évoluer avec succès l'extraction de données à partir de n'importe quel site Web ! Faites-moi savoir si vous avez d'autres questions.

Bon scraping (débloqué) !

Mots clés:

Prendre part à la conversation

Votre adresse email n'apparaitra pas. Les champs obligatoires sont marqués *