
Pourquoi le crawler PHP est-il toujours bloqué ? Essayez cette astuce
Récemment, beaucoup de frères ont demandé, écrit en PHP petit crawler est toujours le site cible bloqué IP, en colère veulent écraser le clavier. Cette question est franchement trop évidente que les empreintes digitales de votre réseau, aujourd'hui vous enseigner une astuce - avec un proxy IP pour jouer la couverture. Comme pour jouer à cache-cache, changez constamment de gilet, afin que le site ne puisse pas attraper votre vrai corps.
Il y a beaucoup à dire sur le choix d'un homme. Il ne faut pas jouer avec les outils.
Le favori des débutants est file_get_contents, mais ce n'est pas différent de courir tout nu :
$html = file_get_contents("http://目标网站") ;
Les vétérans utilisent les combinaisons CURL comme s'ils portaient un gilet pare-balles :
$ch = curl_init() ;
curl_setopt($ch, CURLOPT_URL, "http://目标网站") ;
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ;
$result = curl_exec($ch) ;
Les adresses IP proxy sont une bouée de sauvetage.
Ajoutez ces lignes à la configuration de curl et elle changera instantanément :
curl_setopt($ch, CURLOPT_PROXY, 'Proxy IP:port') ;
// Si vous utilisez la tunnellisation dynamique avec ipipgo
curl_setopt($ch, CURLOPT_PROXY, 'http://用户名:密码@gateway.ipipgo.com:端口') ;
prendre noteChanger d'adresse IP pour chaque demandeL'API d'ipipgo permet d'obtenir la dernière adresse IP en temps réel, comme ceci :
$ip_list = json_decode(file_get_contents('https://api.ipipgo.com/get?num=5')) ;
$random_ip = $ip_list[rand(0,4)] ;
Cas pratique : saisir un nombre limité de marchandises
L'année dernière, j'ai aidé mon ami à écrire un script pour attraper des chaussures, et j'ai été cool en 5 minutes sans utiliser de proxy. Ensuite, j'ai utilisé le pool d'IP exclusif d'ipipgo, et le secret de la réussite est là :
function stealth_request($url){
$ch = curl_init() ;
// Récupère les adresses IP valides de la journée auprès d'ipipgo
$proxy = get_ipgo_proxy() ;
curl_setopt($ch, CURLOPT_PROXY, $proxy) ;
curl_setopt($ch, CURLOPT_TIMEOUT, 10) ; // fixer une durée courte pour le timeout
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'User-Agent : Mozilla/5.0 (Windows NT 10.0 ; rv:91.0) Gecko/20100101 Firefox/91.0'
]) ;
return curl_exec($ch) ;
}
Guide pour éviter les pièges (collecte de pièces détachées)
| symptomatique | antidote |
|---|---|
| Retour soudain à la case départ | Commutation immédiate du prochain nœud IP d'ipipgo |
| CAPTCHA apparaît | Réduire la fréquence des demandes + Remplacer l'agent utilisateur |
| Délai de connexion | Vérifier si le port proxy est mal renseigné |
Un must pour les débutants en AQ
Q : L'agent libre ne peut-il pas être utilisé ?
R : L'agent libre du marché 10 a 9 est la fosse, soit lent ou échec précoce. L'agent de niveau commercial ipipgo a une maintenance dédiée, un taux de réussite mesuré de 98% ou plus.
Q : Comment puis-je savoir que l'agent est en vigueur ?
R. : Il faut cocher la case correspondante dans le code :
curl_setopt($ch, CURLOPT_PROXY, $proxy) ;
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5) ;
if(curl_exec($ch) === false) {
echo "Proxy $proxy is hanging, move to the next one !" ;
}
Q : Comment résoudre le problème du backcrawl d'un site web ?
R : Trois astuces : ① utiliser le proxy résidentiel d'ipipgo ② hiberner de façon aléatoire pendant 0,5 à 3 secondes ③ mélanger l'en-tête UA mobile/PC
Jeu de la mise à niveau : Crawler distribué
Pour les grands projets, n'oubliez pas d'utiliser le multithreading + les pools d'agents et de les configurer de cette manière :
// Obtenir 200 IP de ipipgo pour Redis.
$ip_pool = get_ipipgo_batch(200) ;
// Récupérer des IP différentes pour chaque thread
$worker->setProxy(array_pop($ip_pool)) ;
Notez que la disponibilité de l'IP doit être surveillée et que le remplacement de l'IP est automatiquement déclenché lorsqu'elle tombe en dessous de 90%.
Enfin, pour être honnête, le proxy IP, c'est une chose qui vaut son pesant d'or. Depuis l'utilisation d'ipipgo, plus besoin de se lever en pleine nuit pour changer d'IP, le système maintient automatiquement le pool, gain de temps suffisant pour dormir d'un sommeil paisible. Certains confrères ont dit cher, mais comparé à la perte causée par le numéro bloqué, cet investissement n'est vraiment rien.

