
I. Pourquoi se débarrasser des crawlers distribués ?
Le vieux conducteur qui s'est engagé dans la collecte de données comprend que le crawler autonome est comme boire du thé au lait avec une paille - toucher une grande quantité de données directement dans la bouche donne des crampes. Le cadre Scrapy ordinaire peut exécuter un volume de données de quelques millions, si vous rencontrez le site Web impitoyable anti-crawler, quelques minutes pour envoyer votre IP dans la petite salle noire. Cette fois-ciScrapy-Redis + Proxy IPCette combinaison revient à avoir le doigt d'or sur la roue, à pouvoir travailler de manière distribuée et à pouvoir changer de gilet à tout moment.
Manuel d'opérations de déploiement en grappe (Hardcore)
Tout d'abord, nous allons mettre en place trois serveurs (une machine virtuelle peut faire l'affaire si vous n'avez pas les moyens) et installer la base de données Redis. Voici le clou du spectacle : des projets Scrapy sur toutes les machinessettings.pyTout cela doit être accompagné de ces lignes :
REDIS_URL = 'redis://votre serveur IP:6379' SCHEDULER = 'scrapy_redis.scheduler.Scheduler' DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter'
N'oubliez pas de placer le fichier crawler dans le répertoirestart_urlsPasser à la lecture à partir de Redis :
def start_requests(self).
for url in self.server.lrange('Crawler Task Queue', 0, -1): : yield scrapy.Request(url.decode("utf-8")).
yield scrapy.Request(url.decode("utf-8"))
Troisièmement, la bonne façon d'ouvrir l'IP proxy
C'est ici que nous devons mettre en valeur notreService proxy ipipgoAujourd'hui, son API est conçue pour être extraordinairement simple. Ajoutez un middleware à middlewares.py :
import random
classe ProxyMiddleware.
proxy_list = [
'http://账号:密码@proxy.ipipgo.com:端口'.
Il est recommandé d'utiliser des liens API générés dynamiquement ici
]
request.meta['proxy'] = random.choice(proxy_list)
Rappel important : n'oubliez pas de mettre lePoint de réduction de la concurenceN'épuisez pas le pool d'IP du proxy. Il est recommandé d'ouvrir de 20 à 30 concurrents par nœud, en fonction du trafic acheté.
| scénario d'erreur | Programme de premiers secours |
|---|---|
| Le code d'état 429 apparaît | Changement immédiat d'IP proxy + réduction de la fréquence d'exploration |
| Délai de connexion Redis | Vérifier les paramètres d'incendie + ajouter un mécanisme de réessai |
IV. guide pour éviter les pièges sur le terrain
1. ne jamais écrire une IP proxy morte dans le script du crawler, utiliser ipipgo'sInterface API dynamiqueSa famille peut changer plus de 5000 adresses IP par minute.
2) Ne soyez pas si têtu lorsque vous rencontrez un CAPTCHA, mettez en place une politique de réessai automatique + changez de package IP. le pool IP exclusif d'ipipgo est très utile à ce moment-là.
3. le journal se souvient de faire un traitement hiérarchique, le rapport d'erreur lié à l'IP du proxy est un fichier séparé, pour faciliter l'optimisation du suivi
V. White commune AQ
Q : Pourquoi mon nœud de crawler est-il toujours en train de saisir des tâches ?
R : Vérifiez la configuration de la commande BRPOP de Redis, il est recommandé d'utiliser différentes files d'attente pour le triage des priorités.
Q : Que dois-je faire si j'utilise une adresse IP proxy ou si je suis bloqué ?
A : 80% de l'en-tête de la requête n'est pas aléatoire, installez une bibliothèque fake_useragent, puis vérifiez la gestion des cookies.
Q : Comment choisir le bon forfait pour ipipgo ?
R : période d'essai avec paiement au volume, fonctionnement stable, forfait mensuel réduit. Concurrence : plus de 50 pools dynamiques de classe entreprise, avec des spécialistes pour la maintenance IP.
Dernière remarque : les crawlers distribués ne sont pas une solution miracle pour les ipipgo.Agent de routage intelligentavant qu'il ne prenne vraiment son envol. Pensez à mettre à jour régulièrement les règles de crawler, ne laissez pas la stratégie anti-crawler se mettre à niveau dans la fosse. Si vous avez des problèmes de déploiement, vous pouvez directement @ leur service client technique, la vitesse de réponse est N fois plus rapide que l'agent libre...

