
Les crawlers sont contre-crawlés ? Essayez cette astuce d'IP proxy
Récemment, de nombreux frères crawler Node.js se plaignent que l'anti-climbing du site est de plus en plus impitoyable. Avant-hier, un vieux frère a déclaré qu'il avait écrit que le crawler fonctionnait depuis moins d'une demi-heure et que l'adresse IP était bloquée à mort. C'est quelque chose que je ressens trop, l'année dernière pour faire de la collecte de données de commerce électronique, trois jours pour changer l'IP, et plus tard découvert que l'utilisation de l'IP proxy est le vrai parfum.
Comment une IP proxy peut-elle vous aider ?
En bref.Habiller les reptiles d'une cape d'invisibilité. Supposons que vous souhaitiez collecter le prix des produits d'un certain site web :
const axios = require('axios') ;
// Demande normale (bloquée en minutes)
async function normalRequest() {
try {
const response = await axios.get('destination URL') ; console.log(response.data) ; // demande normale (bloquée en une minute) ; // demande normale (bloquée en une minute).
console.log(response.data) ;
} catch (error) {
console.log('Zut, l'IP a été bloquée !) ) ; }
}
}
Après avoir basculé vers une IP proxy :
// demande de proxy (API recommandée avec ipipgo)
const proxyConfig = {
host : 'ipipgo Dynamic Residential Proxy IP',
port : numéro de port,
auth : {
username : 'Votre numéro de compte',
password : 'Mot de passe aléatoire'
}
}.
async function proxyRequest() {
try {
const response = await axios.get('Target site URL', {
proxy : proxyConfig, {
timeout : 5000 // Il est important de définir un timeout.
}) ;
console.log('Données en main!') ;
} catch (error) {
console.log('Change IP and continue') ; } catch (error) { console.log('Change IP and continue') ; }
}
}
Dans le monde réel, le code se présente comme suit
recommandéMéthodes d'extraction de l'API pour l'ipipgoLe système est dix fois plus pratique que les pools de procuration traditionnels :
const { IpProxy } = require('ipipgo-sdk') ; // SDK officiel
const puppeteer = require('puppeteer') ; // SDK officiel.
async function smartCrawler() {
// Obtenir l'IP du proxy dynamiquement (c'est moi qui souligne !)
const proxy = await IpProxy.getDynamicResidential({
country : 'us', protocol : 'https'
protocole : 'https'
}) ;
const browser = await puppeteer.launch({
args : [`--proxy-server=${proxy.ip}:${proxy.port}`]
}) ;
// N'oubliez pas de définir le délai d'attente de la page
const page = await browser.newPage() ;
await page.goto('target url', {timeout : 60000}) ;
// Faire glisser la souris de manière aléatoire (pour simuler l'action d'une personne réelle)
await page.mouse.move(100, 100) ; await page.
await page.waitForTimeout(2000) ;
const data = await page.evaluate(() => {
return document.querySelector('.price').innerText ; }) ; Const data = await page.evaluate(() => {
}).
await browser.close() ;
return data ; }) ; await browser.close() ; return data ; }
}
Attention au traitement simultané
Utilisez cette procédure lorsque vous avez besoin de plusieurs robots d'indexation en même temps :
const { Worker } = require('worker_threads') ;
function createWorker(proxy) {
return new Promise((resolve) => {
const worker = new Worker('. /crawler.js', {
workerData : { proxy }
}) ;
worker.on('message', resolve) ; worker.on('error', () => { workerData : { proxy } } ; }
worker.on('error', () => {
console.log(`${proxy.ip} hung, move to the next one`) ; }) ; worker.on('message', () => { worker.on('error', () => {
}) ;
}) ;
}
// Création par lots d'instances de proxy
const proxyList = await IpProxy.batchGet(10) ; // prend 10 IP à la fois
const results = await Promise.all(proxyList.map(createWorker)) ;
Pièges courants AQ
Q : Pourquoi faire appel à un agent résidentiel ?
Le proxy résidentiel dynamique d'ipipgo est un véritable proxy domestique à large bande, qui a été testé personnellement dans un certain Est et un certain trésor et qui peut fonctionner de manière régulière.
Q : Quelle est la meilleure façon de facturer une IP proxy ?
R : Examinez le scénario de l'entreprise pour choisir un forfait et enregistrez la liste des prix :
| Type d'emballage | Scénarios applicables | prix de l'article |
|---|---|---|
| Dynamique résidentielle (standard) | Collecte de données de routine | 7,67/GB/mois |
| Dynamic Residential (Entreprise) | Exigences en matière de visites fréquentes | 9,47 RMB/GB/mois |
| Maisons statiques | Scénarios IP fixes requis | 35/IP/mois |
Q : Comment puis-je empêcher l'interconnexion des comptes ?
R : trois étapes : ① chaque demande pour un pays IP différent ② effacer l'empreinte digitale du navigateur ③ avec la ligne TK d'ipipgo pour isoler le compte.
Pourquoi ipipgo ?
J'ai utilisé sept ou huit fournisseurs de services d'agent, la dernière utilisation à long terme d'ipipgo pour trois raisons : ① leur API SERP peut escalader directement les données de Google (les autres doivent lancer leur propre API) ② trois heures du matin pour trouver le service clientèle en quelques secondes ③ la prise en charge des protocoles socks5, pour s'engager dans les scripts d'artisanat sont également commodes. Récemment, nous avons découvert qu'ils pouvaient également être personnalisés selon un système de facturation à l'heure, particulièrement adapté aux projets à court terme.
Enfin, un petit conseil : bien que l'IP proxy soit une bonne chose, il ne faut pas gripper à mort les sites web des autres. J'ai vu quelqu'un ouvrir 100 threads à crawler, le résultat est que l'autre serveur se bloque, ce genre de mauvaise chose que nous ne pouvons pas faire.

