
Warum ist der PHP-Crawler immer blockiert? Versuchen Sie diesen Trick
Kürzlich fragte eine Menge Brüder, in PHP geschrieben kleinen Crawler ist immer das Ziel Website blockiert IP, wütend wollen die Tastatur zu zerschlagen. Diese Angelegenheit ist offen gesagt zu offensichtlich, dass Ihr Netzwerk Fingerabdrücke, heute lehren Sie einen Trick - mit einem Proxy-IP zu spielen Abdeckung. Wie Verstecken spielen ständig die Weste zu ändern, so dass die Website nicht fangen können Ihre wirklichen Körper.
Es spricht viel dafür, sich einen Mann auszusuchen und nicht mit den Werkzeugen zu hantieren.
Der Favorit für Neulinge ist file_get_contents, aber das ist nicht anders als nackt zu laufen:
$html = file_get_contents("http://目标网站");
Die Veteranen benutzen die CURL-Anzüge, als ob sie einen Körperpanzer tragen würden:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://目标网站");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
Proxy-IPs sind ein Rettungsanker.
Fügen Sie diese Zeilen der curl-Konfiguration hinzu, und sie ändert sich sofort:
curl_setopt($ch, CURLOPT_PROXY, 'Proxy IP:Port');
// Bei Verwendung von dynamischem Tunneln mit ipipgo
curl_setopt($ch, CURLOPT_PROXY, 'http://用户名:密码@gateway.ipipgo.com:端口');
zur Kenntnis nehmenIP für jede Anfrage ändernDie API von ipipgo erhält die neueste IP in Echtzeit, etwa so:
$ip_list = json_decode(file_get_contents('https://api.ipipgo.com/get?num=5'));
$random_ip = $ip_list[rand(0,4)];
Praktischer Fall: Ergreifen einer begrenzten Anzahl von Waren
Letztes Jahr habe ich meinem Freund geholfen, ein Skript zu schreiben, um Schuhe zu ergattern, und ich war in 5 Minuten cool, ohne einen Proxy zu benutzen. Dann habe ich den exklusiven IP-Pool von ipipgo benutzt, und hier liegt das Geheimnis des Erfolgs:
function stealth_request($url){
$ch = curl_init();
// Abrufen der gültigen IPs des Tages von ipipgo
$proxy = get_ipipgo_proxy();
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_TIMEOUT, 10); // Kurz für Timeout setzen
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Benutzer-Agent: Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/91.0'
]);
return curl_exec($ch);
}
Leitfaden zur Vermeidung von Fallstricken (Sammlung von Ersatzteilen)
| symptomatisch | Gegenmittel |
|---|---|
| Plötzlich zurück ins Leere | Sofortige Vermittlung des nächsten IP-Knotens von ipipgo |
| CAPTCHA erscheint | Häufigkeit der Anfragen reduzieren + Benutzer-Agent ändern |
| Zeitüberschreitung der Verbindung | Prüfen Sie, ob der Proxy-Port falsch eingegeben wurde |
Ein Muss für QA-Anfänger
F: Kann der freie Mitarbeiter nicht eingesetzt werden?
A: Der Markt freien Agenten 10 haben 9 ist die Grube, entweder langsam oder frühes Scheitern. ipipgo kommerziellen Ebene Agent hat engagierte Wartung, gemessen Erfolgsquote von 98% oder mehr.
F: Woran erkenne ich, dass das Mittel wirksam ist?
A: Setzen Sie einen Haken in den Code:
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
if(curl_exec($ch) === false) {
echo "Proxy $proxy hängt, gehe zum nächsten!" ;
}
F: Wie kann ich das Problem lösen, wenn ich auf einen Website-Backcrawl stoße?
A: Drei Tricks: ① ipipgo's Residential Proxy verwenden ② zufällig für 0,5-3 Sekunden in den Ruhezustand gehen ③ Mobile/PC UA Header mischen
Upgrade Play: Verteilter Crawler
Denken Sie bei großen Projekten daran, Multithreading und Agentenpools zu verwenden und dies entsprechend zu konfigurieren:
// Hole 200 IPs von ipipgo für Redis.
$ip_pool = get_ipipgo_batch(200);
// Holen Sie verschiedene IPs für jeden Thread
$worker->setProxy(array_pop($ip_pool));
Beachten Sie, dass die IP-Verfügbarkeit überwacht werden sollte und der IP-Ersatz automatisch ausgelöst wird, wenn sie unter 90% sinkt.
Schließlich, um ehrlich zu sein, der Proxy-IP-Sache ein Pfennig ein Pfennig. Da die Verwendung von ipipgo, nicht mehr brauchen, um in der Mitte der Nacht aufstehen, um die IP zu ändern, unterhält das System automatisch den Pool, spart Zeit genug, um einen ruhigen Schlaf zu schlafen. Einige Brüder sagten, teuer, aber im Vergleich zu den Verlusten, die durch die blockierte Nummer, diese Investition ist wirklich nichts.

