
Tout d'abord, pourquoi le crawling de Ruby est-il toujours bloqué ? Vous avez probablement manqué ceci
Récemment, un ami a aidé à déboguer un crawler et a découvert que de nombreux débutants pensent qu'en utilisant Nokogiri, ils peuvent simplement récupérer des données. En conséquence, il suffit de courir deux jours, le site cible renvoie une erreur 403. En fait, le problème est le suivantLes demandes sont trop homogènes-La même IP demande à plusieurs reprises, le serveur ne bloque pas, vous bloquez qui ?
C'est ici qu'il faut mettre de l'ordre dans vos scripts Ruby. Plus précisément, cela se fait par l'intermédiaire de l'optionRotation de l'IP du proxyLe service est conçu pour que chaque demande ressemble à un utilisateur normal dans une région différente. Par exemple, nous utilisons le service d'ipipgo, qui fournit un pool d'IP résidentielles dynamiques, chaque demande change automatiquement l'IP d'exportation, le taux de réussite peut être mentionné à 85% ou plus.
Deuxièmement, 5 minutes pour s'occuper de la configuration du proxy Ruby
La mise en place de proxys en Ruby est on ne peut plus simple. Prenons l'exemple de HTTParty :
nécessite 'httparty'
proxy = "http://user:pass@gateway.ipipgo.com:9020"
response = HTTParty.get('https://target.com', {
http_proxyaddr : proxy.split('@').last.split(':').first, {
http_proxyport : proxy.split(':').last.to_i,
http_proxyuser : proxy.split('://').last.split(':').first,
http_proxypass : proxy.split(':')[2].split('@').first
})
centreFormat des informations d'authentificationDe nombreux débutants sont victimes d'erreurs d'épissage de nom d'utilisateur et de mot de passe. Les adresses de proxy d'ipipgo sont dans un format uniforme, il suffit donc de les copier à partir de leur documentation.
| Type d'agent | Scénarios applicables | paquet ipipgo |
|---|---|---|
| Résidentiel dynamique | recherche à haute fréquence | Édition commerciale |
| Entreprises statiques | Se connecter pour garder | Personnalisation de l'entreprise |
| Salle de serveurs IP | Téléchargement des données | version de base |
III. 3 Conseils divins pour l'analyse syntaxique Nokogiri
Une fois la page obtenue, la posture d'analyse est importante. Partagez quelques expériences concrètes :
1. Préséance des sélecteurs CSSLes sélecteurs CSS sont plus lisibles que XPath. Par exemple, pour trouver le prix d'un produit, utilisezdoc.css('.price-box .final-price')
2. conversion forcée des codesLes codes de commande : Ne paniquez pas lorsque vous rencontrez un code brouillé, commencez par le faire.response.body.force_encoding('UTF-8')
3. capture des exceptionsUtilisation de larescue Nokogiri::SyntaxErrorTraitement des données sales afin d'éviter le plantage de l'ensemble du script
Quatrièmement, des cas concrets : le système de surveillance des prix du commerce électronique
L'année dernière, j'ai réalisé un système de comparaison de prix avec le proxy ipipgo + Ruby, et l'architecture était la suivante :
1) Utiliser Sidekiq pour créer une file d'attente de tâches d'exploration.
2. sélectionner aléatoirement le nœud de sortie d'ipipgo pour chaque demande
3. Nokogiri analyse et stocke dans Redis.
4. générer des rapports sur la fluctuation des prix toutes les heures
Cette solution fonctionne en continu depuis six mois et le taux d'IP bloquées est passé de 601 TP3T à moins de 31 TP3T. La clé est la suivanteLa qualité de l'agent doit être stableLa disponibilité des nœuds d'ipipgo se situe depuis longtemps autour de 99%, ce qui permet d'économiser de la maintenance.
V. Foire aux questions AQ
Q : Que dois-je faire si mon agent est lent ?
R : La priorité est donnée aux nœuds qui sont physiquement proches. L'arrière-plan d'ipipgo peut verrouiller l'IP de sortie d'une ville donnée. Par exemple, si le site web cible se trouve à Hangzhou, choisissez un nœud dans le Zhejiang.
Q : Échec de l'exploration d'un site web HTTPS ?
R : Vérifiez la version OpenSSL de Ruby, puis ajoutez le HTTParty au fichierssl_version : :TLSv1_2Paramètres. Si cela ne fonctionne pas, essayez de changer le proxy socks5 d'ipipgo.
Q : Comment puis-je savoir si une adresse IP est exposée ?
R : Ajoutez un lien de détection dans le script et visitez le site avant de l'explorer.https://ip.ipipgo.com/checkCette interface renvoie des informations sur l'adresse IP de sortie actuellement utilisée.
VI. le résumé ultime des lignes directrices anti-blocage
Et enfin.Les quatre choses à faire et à ne pas fairePhrase d'accroche :
Random UA|Proxy Rotation|Request Interval|Exception Handling
Ne faites pas de demandes fréquentes|Ne fixez pas de paramètres|N'analysez pas d'erreurs|Ne demandez pas plus que ce dont vous avez besoin.
Configuré de la sorte, avec la fonction de routage intelligent d'ipipgo, il peut en principe répondre aux besoins de 90% en matière d'exploration de sites web. Leur service client technique est très professionnel, et vous pouvez directement demander un plan de configuration lorsque vous rencontrez des problèmes spécifiques.

