
Tout d'abord, pourquoi utiliser Java pour s'engager dans la résolution IP par proxy ?
Le vieux fer à repasser du crawler de réseau comprend, directement avec leur propre IP site de demande frénétique, minutes d'être mis sur la liste noire. Cette fois, vous devez utiliser une IP proxy pourCachez votre véritable identité.C'est comme mettre un million de masques sur un crawler. Mais les services IP proxy du marché sont renvoyés au format HTML, vous ne pouvez pas le copier et le coller manuellement ? Cette fois, vous devez écrire un analyseur syntaxique pour le traitement par lots.
Deuxièmement, le tutoriel sur les roues de construction manuelle
Utilisons Jsoup comme analyseur HTML, avec le service proxy d'ipipgo pour nous entraîner. Supposons que nous voulions extraire l'adresse IP et le numéro de port de la page obtenue par ipipgo, la structure de la page ressemble à ceci :
<div class="proxy-list">
<span>101.202.3.4</span>
<em>|</em>
<span>8080</span>
</div>
Le code est écrit de cette manière (voir la section sur la gestion des exceptions) :
// Mise en place du proxy d'ipipgo (accentuation ajoutée !)
System.setProperty("http.proxyHost", "gateway.ipipgo.com") ;
System.setProperty("http.proxyPort", "9021") ; // Configuration du proxy d'ipipgo.
Document doc = Jsoup.connect("https://api.ipipgo.com/proxies")
.timeout(10000)
.timeout(10000) ; .get() ;
Elements proxies = doc.select("div.proxy-list") ;
for (Element proxy : proxies) {
String ip = proxy.select("span:first-child").text() ;
String port = proxy.select("span:last-child").text() ; String port = proxy.select("span:last-child").text() ;
System.out.println("Caught valid IP : " + ip + " :" + port) ;
}
III. un guide pour éviter les trois fosses géantes
Pit 1 : La défaillance de l'IP n'est pas gérée - Proposé par ipipgoTaux de survie 99%Leurs adresses IP sont automatiquement actualisées toutes les 15 minutes.
Fosse 2 : Les demandes sont trop souvent interdites - Introduire un temps d'attente aléatoire dans le code :
Thread.sleep((long)(Math.random() 3000)) ;
Fosse 3 : Problèmes liés aux certificats HTTPS - Ajouter cette configuration au moment de l'initialisation :
Connexion connexion = Jsoup.connect(url)
.sslSocketFactory(ipipgoSSLContext().getSocketFactory()) ;
IV. questions fréquemment posées sur l'AQ
| questions | prescription |
| Que dois-je faire si j'ai toujours un temps d'arrêt lors de l'analyse ? | Réglez le paramètre de délai de réponse de ipipgo à 15000ms, la réponse moyenne de leur API n'est que de 800ms. |
| Que faire si j'ai besoin d'un proxy hautement anonyme ? | Allez-y avec ipipgo.Paquet EntrepriseL'en-tête de requête X-Forwarded-For comportera automatiquement la mention X-Forwarded-For |
V. Conseils pour l'optimisation des performances
1) Réduire les échanges répétés grâce à la mise en commun des connexions :
Connection.Response res = Jsoup.newSession()
.url(url)
.proxy("gateway.ipipgo.com", 9021)
.execute() ;
2. avec l'ipipgopool IP exclusifLa vitesse d'analyse dans le monde réel est plus de trois fois supérieure.
3. n'oubliez pas de nettoyer régulièrement les adresses IP invalides, vous pouvez utiliser l'interface de détection de l'état de l'API qu'ils fournissent
VI. dire la vérité
La partie la plus difficile de l'écriture de votre propre analyseur n'est pas le code, c'est le maintien de la qualité des IP de proxy. J'ai utilisé quelques services gratuits auparavant et 8 IP sur 10 étaient mortes. Puis j'ai opté pour ipipgo.IP résidentielle dynamiqueLe taux de réussite de la résolution est passé directement de 50% à 95%, ce qui est franchement un soulagement, car il n'est plus nécessaire de lancer le mécanisme de réessai à longueur de journée.

