PHP agarrar la página debe: DOMDocument niñera enseñanza
El hierro viejo dedicado a la recopilación de datos debe haber encontrado con este problema: el sitio de destino para cambiar la estructura HTML de la madre de los padres no saben, escribir un buen script de rastreo directamente huelga. Hoy en día, vamos a utilizar propio componente DOMDocument de PHP para enseñarle cómo elegantemente desmontar la estructura de la página web, y luego con elipipgoEl servicio proxy IP garantiza que la recogida sea tan constante como un perro viejo.
En primer lugar, ¿por qué utilizar una IP proxy para captar datos?
Muchos sitios web están instalados "sistema de control de acceso", la misma IP visitas frecuentes tirar inmediatamente negro. En este momento es necesario comoipipgoUn servicio proxy profesional de este tipo es como preparar un montón de "suplentes" para el rastreador. Por poner un ejemplo:
$proxy = 'http://username:password@gateway.ipipgo.io:9020';
$context = stream_context_create([
'http' => ['proxy' => $proxy]
]);
$html = file_get_contents('URL de destino', false, $context);
El gateway.ipipgo.io de este código es su portal de enrutamiento inteligente, que asigna automáticamente los nodos más adecuados. Tras hacer pruebas con su proxy, la probabilidad de ser bloqueado bajó de 80% a menos de 5%.
En segundo lugar, DOMDocument funcionamiento básico de los tres ejes
Una vez que tenemos el código fuente de la página web, vamos a empezar a desmontar las piezas:
$dom = nuevo DOMDocument();
@$dom->loadHTML($html); // enmascarar el mensaje de advertencia con @
$xpath = new DOMXPath($dom);
// Ejemplo: coger todos los precios de los productos
$prices = $xpath->query('//span[@class="precio"]'); }; $prices = $xpath->query('//span[@class="precio"]'); }
foreach ($prices as $node) {
echo $node->nodeValue."";
}
Cuidado con estos dos baches:
1. Los problemas de codificación de las páginas web se solucionan con mb_convert_encoding
2. Ignorar errores de análisis HTML con símbolos @.
III. Práctico: programa dinámico de adquisición de sitios web
Cuando te encuentres con un sitio web que carga datos con JS, puedes hacer recolección distribuida con IP proxy. Por ejemplo, configure el clúster de recopilación así:
Tipo de nodo | concurrencia | estrategia de cambio |
---|---|---|
IP residencial doméstica | 10 hilos | Cambio de IP a petición |
Centro de datos IP en el extranjero | 5 hilos | Cambios de IP por hora |
gasto o desembolsoipipgoAPI para obtener el pool de IPs:
$ip_list = json_decode(file_get_contents('https://api.ipipgo.com/getips?type=http&num=20'));
IV. Botiquín de primeros auxilios para problemas comunes
P: ¿Qué debo hacer si no puedo conectarme a la IP del proxy?
A:Primero compruebe el formato de información de autenticación, utilice la herramienta "test de conexión" proporcionada por ipipgo background diagnosis.
P: ¿El XPath está escrito correctamente pero no puede capturar los datos?
R: 80% de la página web tiene iframe, primero utilice el posicionamiento regular al marco específico y luego analizar el
P: ¿Retraso repentino en las adquisiciones?
R: Puede haber disparado el límite de velocidad de la web, se sugiere añadir tiempo de espera aleatorio en el código:
sleep(rand(1, 3)); // dormir aleatoriamente 1-3 segundos
V. Ventajas ocultas del ipipgo
Además de los servicios básicos de la agencia, su familia tiene otras dos características asesinas:
1. Sistema inteligente de reintentosConmutación automática de IP no válidas
2. Interfaz de limpieza de datosFiltrado automático de contenidos duplicados
Por último dar un consejo: no utilice sleep(0) en el código de recolección, control de viento del sitio web no es vegetariana. Utilice proxy IP + retardo aleatorio + triple protección de conmutación automática, con el fin de dejar que el script de colección larga vida.