
PHP attrape la page doit : DOMDocument nounou d'enseignement
Le vieux fer à repasser engagé dans la collecte de données devrait avoir rencontré ce problème : le site cible pour changer la structure HTML de la mère parentale ne sait pas, écrire un bon script de crawler directement frapper. Aujourd'hui, nous allons utiliser le composant DOMDocument propre à PHP pour vous apprendre à désassembler élégamment la structure de la page web, puis avec le composantipipgoLe service IP proxy garantit que la collection est aussi stable qu'un vieux chien.
Tout d'abord, pourquoi utiliser une adresse IP proxy pour procéder à la saisie de données ?
De nombreux sites sont dotés d'un "système de contrôle d'accès", qui fait que les visites fréquentes d'une même adresse IP entraînent immédiatement le retrait de l'adresse noire. À ce moment-là, il est nécessaire d'aimeripipgoUn tel service de proxy professionnel revient à préparer une série de "doublures" pour le robot d'exploration. Pour vous donner un exemple :
$proxy = 'http://username:password@gateway.ipipgo.io:9020' ;
$context = stream_context_create([
'http' => ['proxy' => $proxy]
]) ;
$html = file_get_contents('destination URL', false, $context) ;
Le gateway.ipipgo.io dans ce code est leur portail de routage intelligent, qui assigne automatiquement les nœuds les plus appropriés. Après avoir testé son proxy, la probabilité d'être bloqué est passée de 80% à moins de 5%.
Deuxièmement, DOMDocument fonctionnement de base des trois axes
Une fois que nous avons le code source de la page web, commençons à en désassembler les parties :
$dom = new DOMDocument() ;
@$dom->loadHTML($html) ; // masque le message d'avertissement avec @
$xpath = new DOMXPath($dom) ;
// Exemple : récupérer tous les prix des produits
$prices = $xpath->query('//span[@class="price"]') ; } ; $prices = $xpath->query('//span[@class="price"]') ; }
foreach ($prices as $node) {
echo $node->nodeValue."" ;
}
Attention à ces deux nids-de-poule :
1. les problèmes d'encodage des pages web sont traités avec mb_convert_encoding
2. ignorer les erreurs d'analyse HTML avec les symboles @
III. Pratique : programme dynamique d'acquisition de sites web
Lorsque vous rencontrez un site web qui charge des données avec JS, vous pouvez effectuer une collecte distribuée avec un proxy IP. Par exemple, configurez le cluster de collecte comme suit :
| Type de nœud | concurrence | stratégie de commutation |
|---|---|---|
| Domestique Résidentiel IP | 10 fils | Changement d'IP sur demande |
| Centre de données d'outre-mer IP | 5 fils | Changements horaires de l'IP |
dépense ou fraisipipgopour obtenir le pool d'adresses IP :
$ip_list = json_decode(file_get_contents('https://api.ipipgo.com/getips?type=http&num=20')) ;
IV. kit de premiers secours pour les problèmes courants
Q : Que dois-je faire si je ne parviens pas à me connecter à l'adresse IP du proxy ?
A:Vérifiez d'abord le format des informations d'authentification, en utilisant l'outil "test de connexion" fourni par ipipgo background diagnosis.
Q : XPath est écrit correctement mais ne peut pas capturer les données ?
R : 80% des pages web contiennent des iframes, il faut d'abord utiliser le positionnement normal pour le cadre spécifique, puis analyser le code de l'iframe.
Q : Ralentissement soudain des acquisitions ?
R : Il se peut que la limite de vitesse du site ait été dépassée. Il est conseillé d'ajouter un temps d'attente aléatoire dans le code :
sleep(rand(1, 3)) ; // dormir aléatoirement pendant 1 à 3 secondes
V. Avantages cachés de l'ipipgo
En plus des services de base de l'agence, sa famille dispose de deux autres atouts :
1. Système de réessai intelligentChangement d'adresse IP : commutation automatique des adresses IP non valides
2. Interface de nettoyage des donnéesFiltrage automatique du contenu dupliqué
Enfin, un conseil : n'utilisez pas sleep(0) dans le code de collecte, le contrôle du vent du site web n'est pas végétarien. Utilisez la triple protection proxy IP + délai aléatoire + commutation automatique, afin de permettre au script de collecte d'avoir une longue durée de vie.

