
Pourquoi les crawlers se font-ils toujours attraper ? Essayez le combo Proxy IP + Sélecteur de classe
Les confrères qui pratiquent l'exploration de données savent que la page web qui permet de changer le nom d'une classe en quelques minutes vous permet de vous débarrasser d'un script. Ils ont récemment trouvé un moyen original : l'adresse IP du proxy et le sélecteur de classe XPath sont liés à l'utilisation des robots d'exploration, qui ont installé un système de déguisement intelligent. Par exemple, en utilisant//div[contains(@class,'list-item')]Grâce à ce type de correspondance floue, même si le site web change le nom de la classe de "item-1″ à "item_new", nous pouvons toujours récupérer les données.
Importation de requêtes
from lxml import html
proxies = {
'http' : 'http://user:pass@ipipgo-proxy:9020',
'https' : 'http://user:pass@ipipgo-proxy:9020'
}
response = requests.get('https://target.com', proxies=proxies)
tree = html.fromstring(response.text)
Classe de correspondance floue avec les éléments
items = tree.xpath("//div[contains(@class,'item')]/text()")
L'accent est mis ici sur l'action de l'ipipgo.Agents résidentiels dynamiquesIl possède plus de 2 millions d'adresses de réseaux domestiques réels dans son pool d'adresses IP. La dernière fois que j'ai fait cela avec un sélecteur de classe, je l'ai fait tourner pendant une semaine d'affilée sans déclencher de backcrawl, ce qui est beaucoup plus stable qu'en utilisant l'IP d'un centre de données.
Deuxièmement, le sélecteur de classe des trois grands travaux
Ne soyez pas idiot et n'utilisez pas le nom complet de la classe, ces trois astuces vous permettront de ne pas tomber dans le piège :
| manière | exemple typique | Scénarios d'utilisation |
|---|---|---|
| correspondance floue | contains(@class,'part') | Nom de classe avec suffixe dynamique |
| Filtres multiples | [contains(@class, 'a') and contains(@class, 'b')] | Styles de classes composites |
| le positionnement hiérarchique | //div[@class='wrap']//li[contains(@class,'item')] | Analyse des structures imbriquées |
Notez qu'il peut y avoir des pièges cachés dans le nom de la classe, par exemple, la classe de produit d'un certain trésor sera accompagnée d'un horodatage. Cette fois-ci, utilisez la fonctionagent de rotationL'adresse IP est automatiquement modifiée toutes les 5 minutes et, grâce à la correspondance floue, elle est aussi stable qu'un vieux chien.
Troisièmement, la position d'ouverture correcte de l'IP proxy
Ayant vu trop de gens gaspiller de bons agents, n'oubliez pas ces trois choses :
- Ne pas utiliser d'agents libres.8 sur 10 sont des pots de miel, les 2 autres sont plus lents que des escargots.
- Le protocole doit être correct.Ne pas utiliser de proxy http si vous utilisez https sur votre page web, il y aura des fuites.
- réglage du délai d'attenteIl est recommandé de régler 3 à 5 secondes, soit plus que le changement direct d'adresse IP.
Prenons l'exemple du proxy d'ipipgo, il supporte le double protocole socks5 et https. Il est recommandé de le configurer de cette manière :
PROXY_POOL = [
"socks5://user:pass@us1.ipipgo.io:1080",
"https://user:pass@eu1.ipipgo.io:8443"
]
IV. guide pour éviter les pièges sur le terrain
Récemment, j'ai aidé un ami à collecter des données sur un site web de recrutement, et j'ai rencontré un problème étrange : j'ai évidemment utilisé le sélecteur de classe, mais les données m'ont quand même échappé. Plus tard, j'ai découvert que le site web avait placé une partie du contenu dans la section<div class="item item-hidden">Ri. La solution est simple :
Contenant à la fois les cas d'élément et d'élément-caché
items = tree.xpath("//div[contains(@class, 'item') and not(contains(@class, 'hidden'))]")
À ce stade, si vous utilisez un proxy normal, les tentatives fréquentes seront bloquées. Passez au proxy d'ipipgoIP résidentielle statique de longue duréeL'IP unique dure 6 heures et, grâce à ce sélecteur de précision, le taux de réussite est porté à son maximum.
V. Foire aux questions AQ
Q : Que dois-je faire si le sélecteur de classe ne correspond jamais à la réalité ?
R : Vérifiez d'abord si l'élément se trouve dans une iframe, puis copiez l'XPath à l'aide de l'outil de développement du navigateur. Il est recommandé de faire correspondre l'XPath à celui d'ipipgoAgents très anonymespour éviter d'être bloqué.
Q : Que dois-je faire si mon IP proxy tombe soudainement en panne ?
A : ajouter un mécanisme de répétition des exceptions dans le code de la requête, il est recommandé d'utiliser le mécanisme de l'ipipgo.Commutation automatique des paquetsL'IP suivante est automatiquement coupée en cas d'échec.
Q : Que se passe-t-il si je dois gérer un grand nombre de CAPTCHA ?
R : Réduire la fréquence des requêtes + utiliser un proxy avec empreinte du navigateur. ipipgo'sAgent PremiumLa prise en charge de l'agent utilisateur personnalisé permet de réduire efficacement le taux de déclenchement des CAPTCHA.
VI. les solutions ultimes
L'emballage des IP proxy et de la résolution intelligente en tant que service est la voie à suivre. Par exemple, avec le serviceService de passerelle APISi vous souhaitez obtenir les données nettoyées, vous pouvez passer l'expression XPath directement. Même la gestion du proxy et l'analyse HTML sont sauvegardées, ce qui convient au besoin de sortir rapidement des résultats de la scène.
demandes d'importation
api_url = "https://gateway.ipipgo.com/v1/extract"
params = {
"url" : "https://target.com",
"xpath" : "//div[contains(@class,'price')]",
"api_key" : "your_ipgo_key"
}
response = requests.get(api_url, params=params)
print(response.json()['data'])
Ce jeu déplace la complexité vers le fournisseur de services et se concentre sur la logique commerciale elle-même. Il est particulièrement adapté aux situations qui nécessitent une collecte de données multigéographiques, comme l'obtention simultanée d'informations sur les prix dans différentes régions.

