Pregunta

Estoy usando PHP para raspar un sitio web y recoger algunos datos. Todo se hace sin usar expresiones regulares. Estoy utilizando php de explotar () para encontrar etiquetas HTML particulares en su lugar.

Es posible que si la estructura de la página web cambia (CSS, HTML), entonces los datos erróneos pueden ser recogidos por el raspador. Así que la pregunta es - ¿cómo puedo saber si la estructura HTML ha cambiado? Cómo identificar este antes de almacenar los datos en mi base de datos para evitar datos erróneos siendo almacenados.

¿Fue útil?

Solución

Creo que no tiene ningún soluciones limpias si está raspando una página donde los cambios de contenido.

he desarrollado varios raspadores pitón y sé cómo puede ser frustrante cuando el sitio sólo hace un cambio sutil en su diseño.

Se podría intentar una solución a la mecanizar (no sé la contraparte php) y si tienes suerte, podría aislar el contenido que necesita para extraer enlaces (?).

Otro enfoque sería possibile código de algunas limitaciones y controlarlos antes de tienda para db.

Por ejemplo, si usted está raspando las direcciones URL, tendrá que comprobar que lo ha analizado rascador es formalmente una URL válida; misma ID número entero o como se quiera para raspar que se puede reconocer como válido.

Si está raspando texto sin formato, que será más difícil de comprobar.

Otros consejos

Si desea conocer los cambios con respecto a la estructura, creo que la mejor manera es para almacenar la estructura DOM de la primera página y luego compararlo con uno nuevo.

Hay muchas manera que puede hacerlo: - SAXParser DOMParser etc.

Tengo un pequeño blog que le dará algunos consejos para lo que quiero decir http: // let-ellos- c.blogspot.com/2009/04/xml-as-objects-in-oops.html

o puede utilizar http://en.wikipedia.org/wiki/Simple_API_for_XML o analizador DOM Utility.

Hablando de mi culo aquí, pero su posible es posible que desee ver algunas Document Object Model métodos PHP.

http://php.net/manual/en/book.dom.php

Si mi muy, muy limitada comprensión de DOM es correcta, un cambio en la estructura del sitio HTML cambiaría el Document Object Model, pero un simple cambio de contenido dentro de una estructura fija no lo haría. Por lo tanto, si se pudiera capturar el estado DOM y luego se compara en cada roce, ¿no podría, en teoría, determinar que tal cambio se ha hecho?

.

(Por cierto, la forma en que lo hice cuando estaba tratando de obtener una notificación por correo electrónico cuando los resultados del examen de la barra se publicaron en una página en particular se acaba de comparar file_get_contents () los valores Sorprendentemente, funcionó a la perfección: No hay falsos positivos, y me enviado por correo electrónico tan pronto como el sitio publicó el contenido.)

depende del sitio, pero se podía contar el número de elementos de página en la página de raspado como etiquetas div, clase y estilo a continuación, mediante la comparación de estos totales frente a los rasguños posteriores a detectar si la estructura de la página ha sido cambiado.

Un proceso similar se podría utilizar para el archivo CSS donde los nombres de cada uno de cada clase o ID pudieron extraerse usando expresiones regulares simples, almacenar y controlarlas según se requiera. Si esta lista tiene nuevas adiciones a continuación, la estructura de la página ha cambiado casi seguro que en algún lugar en el sitio que se está raspada.

En primer lugar, en algunos casos, es posible que desee comparar hashes de la original al nuevo formato html. MD5 y SHA1 hashes son dos populares. Esto puede o no puede ser válida en todas las circunstancias, pero es algo que debe estar familiarizado. Esto le dirá si algo ha cambiado - el contenido, etiquetas, ni nada.

Para comprender si la estructura ha cambiado lo que se necesita para capturar un histograma de las apariciones de la etiqueta y luego comparar esos. Si se preocupan por las etiquetas de estar fuera de orden, entonces tendría que capturar un árbol de las etiquetas y hacer una comparación para ver si las etiquetas se producen en el mismo orden. Esto va a ser muy específico a lo que quiere lograr.

Simple PHP HTML DOM analizador es una herramienta que le ayudará a analizar el HTML.

Explode() no es un analizador de HTML, pero usted quiere saber acerca de los cambios en la estructura HTML. Eso va a ser complicado. Trate de usar un analizador de HTML. Nada más será capaz de hacer esto correctamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top