
Des exercices pratiques vous apprennent à utiliser PHP pour faire de l'exploration de sites web sans bloquer les numéros.
Les crawlers devraient avoir rencontré cette situation : juste saisi quelques pages de données IP a été bloqué, en particulier engagé dans la surveillance des prix du commerce électronique ou l'analyse de l'opinion publique, souvent par le site cible noir. En ce moment, nous devons compter sur le proxy IP pour continuer, aujourd'hui nous prenons PHP pour dire comment jouer avec le proxy IP pour attraper des données.
Le choix du bon fournisseur de services IP proxy est le premier pas vers le succès
Il existe de nombreux fournisseurs de services proxy IP sur le marché, mais il n'y en a pas beaucoup de fiables. Ceux-ci doivent se prêter àipipgoL'agent résidentiel dynamique de la famille, testé personnellement et efficace. Son pool d'adresses IP est mis à jour plus de 2 millions de fois par jour, prend en charge la commutation automatique, et le plus important est qu'il y a des lignes optimisées spécifiquement pour les plateformes de commerce électronique.
// Exemple d'obtention d'un proxy ipipgo
$api_url = "https://api.ipipgo.com/getproxy?format=json&key=你的API密钥" ;
$proxy_data = json_decode(file_get_contents($api_url), true) ;
// L'obtention des informations sur le proxy ressemble à ceci
/
{
"port" : 8888, "expire_time" : "2024-08-01 12:00
"expire_time" : "2024-08-01 12:00:00"
}
/
PHP crawl live code (avec gestion des exceptions)
Le code suivant est testé sur le terrain, en se concentrant sur les paramètres du proxy et les sections de gestion des exceptions :
function fetchWithProxy($url) {
$ch = curl_init() ;
// Récupère le dernier proxy de ipipgo_proxy
$proxy = get_ipgo_proxy() ; // Enveloppez cette fonction vous-même !
curl_setopt($ch, CURLOPT_PROXY, $proxy['ip']) ; // Cette fonction s'enroule sur elle-même.
curl_setopt($ch, CURLOPT_PROXYPORT, $proxy['port']) ; curl_setopt($ch, CURLOPT_PROXYPORT, $proxy['port']) ;
curl_setopt($ch, CURLOPT_TIMEOUT, 15) ; // fixer une durée courte pour le délai d'attente
curl_setopt($ch, CURLOPT_URL, $url) ; curl_setopt($ch, CURLOPT_URL, $url) ; // Fixer un point court pour le timeout.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1) ; curl_setopt($ch, CURLOPT_URL, $url) ; // Fixer un délai court pour le timeout.
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false) ; // sauter la vérification du certificat
// Déguiser le navigateur
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'User-Agent : Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36'
]).
try {
$output = curl_exec($ch) ; if(1TP_errno($ch))
if(curl_errno($ch)){
throw new Exception('Capture failed : '.curl_error($ch)) ; }
}
return $output ; }
} finally {
curl_close($ch) ; }
}
}
// Exemple d'appel
$html = fetchWithProxy("https://target-site.com/product/123") ;
Six conseils pour éviter les anti-crawlers
Il ne suffit pas d'avoir un agent, ces détails restent bloqués si vous n'y prêtez pas attention :
| mesures anti-escalade | méthode de piratage |
|---|---|
| Demande de détection de fréquence | Délai aléatoire de 0,5 à 3 secondes, ne pas utiliser d'intervalles fixes |
| Empreintes digitales des navigateurs | Modifier l'agent utilisateur et les cookies à chaque fois |
| Interception du CAPTCHA | Un agent résidentiel en chair et en os avec ipipgo |
| Analyse du comportement des PI | Pas plus de 30 minutes d'utilisation pour une seule IP |
Questions fréquemment posées
Q : Pourquoi mon proxy a-t-il été bloqué juste après que je l'ai utilisé ?
R : il est possible que l'IP du centre de données ait été utilisée et que l'agent résidentiel d'ipipgo ait été modifié pour essayer de simuler l'environnement réel de l'utilisateur.
Q : Qu'en est-il de l'exploration de pages nécessitant une connexion ?
A:First use the fixed IP to complete the login to obtain cookies, and then use the proxy pool to perform specific operations.
Q : Comment les agents d'ipipgo sont-ils facturés ?
R : Facturation flexible en fonction du trafic et du numéro IP, les nouveaux utilisateurs bénéficient de 5 Go de trafic expérimental, ce qui est suffisant pour effectuer des tests pendant un mois !
Jeu de mise à niveau : architecture distribuée du crawl
Pour les grands projets, l'architecture Redis + multi-processus est recommandée :
// Exemple de pseudo-code
$redis = new Redis() ;
while($proxy = $redis->lpop('ipipgo_proxies')) {
$pid = pcntl_fork() ;
if ($pid == -1) {
die('Failed to create sub-process') ;
} elseif ($pid) {
// La création du processus parent se poursuit
} else {
// Le processus enfant effectue la récupération des données
fetch_data($proxy) ;
exit() ;
}
}
Enfin, nous vous rappelons d'utiliser des IP proxy pour respecter les règles robots.txt du site web, afin de ne pas bloquer le serveur. Vous pouvez contacter directement le support technique d'ipipgo si vous rencontrez des problèmes, ils sont très expérimentés dans le traitement des problèmes d'anti-climbing.

