Pregunta

Escucho a personas que escriben estos programas todo el tiempo y sé lo que hacen, pero ¿cómo lo hacen realmente? Estoy buscando conceptos generales.

¿Fue útil?

Solución

Técnicamente, screenscraping es cualquier programa que toma los datos de visualización de otro programa y los ingiere para su propio uso.

Muy a menudo, screenscaping se refiere a un cliente web que analiza las páginas HTML del sitio web específico para extraer datos con formato. Esto se hace cuando un sitio web no ofrece una fuente RSS o una API REST para acceder a los datos de forma programática.

Un ejemplo de una biblioteca utilizada para este propósito es Hpricot para Ruby, que es una de las mejores -Analizadores HTML analizados utilizados para el raspado de la pantalla.

Otros consejos

Muchas respuestas precisas aquí.

Lo que nadie ha dicho es ¡no lo hagas!

El raspado de la pantalla es lo que hace cuando nadie le proporcionó una interfaz razonable legible por máquina. Es difícil de escribir y frágil.

Como ejemplo, considere un agregador de RSS, luego considere el código que obtiene la misma información trabajando a través de una interfaz de blog normal orientada a los humanos. ¿Cuál se rompe cuando el blogger decide cambiar su diseño?

Por supuesto, a veces no tienes otra opción :(

En general, un raspador de pantalla es un programa que captura la salida de un programa servidor imitando las acciones de una persona sentada frente a la estación de trabajo utilizando un navegador o un programa de acceso a terminal. en ciertos puntos clave, el programa interpretaría la salida y luego realizaría una acción o extraería ciertas cantidades de información de la salida.

Originalmente, esto se realizaba con salidas de caracteres / terminales de mainframes para extraer datos o actualizar sistemas que eran arcaicos o que no eran directamente accesibles para el usuario final. en términos modernos, usualmente significa analizar la salida de una solicitud HTTP para extraer datos o realizar alguna otra acción. con el advenimiento de los servicios web, este tipo de cosas deberían haberse extinguido, pero no todas las aplicaciones ofrecen una buena API para interactuar.

Un raspador de pantalla descarga la página html y extrae los datos interesados, ya sea buscando tokens conocidos o analizándolos como XML o algo así.

En los primeros días de las PC, los raspadores de pantalla emularían un terminal (por ejemplo, IBM 3270) y pretendían ser un usuario para extraer interactivamente, actualizar la información en el mainframe. En tiempos más recientes, el concepto se aplica a cualquier aplicación que proporcione una interfaz a través de páginas web.

Con la aparición de SOA, la captura de pantalla es una forma conveniente de habilitar servicios que no lo son. En esos casos, el raspado de la página web es el enfoque más común adoptado.

Aquí hay un poco de raspado de pantalla implementado en Javascript , usando jQuery (no es una opción común, claro, ya que raspar es generalmente una actividad cliente-servidor):

//Show My SO Reputation Score
var repval = $('span.reputation-score:first'); alert('StackOverflow User "' + repval.prev().attr('href').split('/').pop() + '" has (' + repval.html() + ') Reputation Points.');

Si ejecuta Firebug , copie el código anterior y péguelo en la Consola y véalo en acción aquí en esta página de Preguntas.

Si SO cambia la estructura de DOM / los nombres de clase de elemento / las convenciones de ruta de URI, todas las apuestas están desactivadas y es posible que ya no funcionen. Ese es el riesgo habitual en los esfuerzos de captura de pantalla en los que no hay contrato / entendimiento entre las partes (el raspador y el scrapee [ sí, acabo de inventar una palabra ]).

Técnicamente, el screenscraping es cualquier programa que toma los datos de visualización de otro programa y los ingiere para su propio uso. Para extraer de forma interactiva, actualice la información en el mainframe. En tiempos más recientes, el concepto se aplica a cualquier aplicación que proporcione una interfaz a través de páginas web.

Con la aparición de SOA, la captura de pantalla es una forma conveniente de habilitar servicios que no lo son. En esos casos, el raspado de la página web es el enfoque más común adoptado.

Muy a menudo, screenscaping se refiere a un cliente web que analiza las páginas HTML del sitio web específico para extraer datos con formato. Esto se hace cuando un sitio web no ofrece una fuente RSS o una API REST para acceder a los datos de forma programática.

Normalmente, tiene una página HTML que contiene algunos datos que desea. Lo que haces es escribir un programa que recupere esa página web e intente extraer esos datos. Esto se puede hacer con analizadores XML, pero para aplicaciones simples, prefiero usar expresiones regulares para coincidir con un punto específico en el HTML y extraer los datos necesarios. Sin embargo, a veces puede ser difícil crear una buena expresión regular, ya que el HTML circundante aparece varias veces en el documento. Siempre desea hacer coincidir un elemento único lo más cerca posible de los datos que necesita.

El raspado de la pantalla es lo que hace cuando nadie le proporcionó una interfaz razonable legible por máquina. Es difícil de escribir y frágil.

Como ejemplo, considere un agregador de RSS, luego considere el código que obtiene la misma información trabajando a través de una interfaz de blog normal orientada a los humanos. Cuál se rompe cuando el blogger decide cambiar su diseño.

Un ejemplo de una biblioteca utilizada para este propósito es Hpricot for Ruby, que es uno de los analizadores HTML con mejor arquitectura que se utiliza para el raspado de pantalla.

Tienes una página HTML que contiene algunos datos que deseas. Lo que haces es escribir un programa que recupere esa página web e intente extraer esos datos. Esto se puede hacer con analizadores XML, pero para aplicaciones simples, prefiero usar expresiones regulares para coincidir con un punto específico en el HTML y extraer los datos necesarios. Sin embargo, a veces puede ser difícil crear una buena expresión regular, ya que el HTML circundante aparece varias veces en el documento. Siempre desea hacer coincidir un elemento único lo más cerca posible de los datos que necesita.

  

El raspado de la pantalla es lo que hace cuando nadie le proporcionó una interfaz razonable legible por máquina. Es difícil de escribir y frágil.

No es del todo cierto. No creo que esté exagerando cuando digo que la mayoría de los desarrolladores no tienen experiencia suficiente para escribir API decentes. He trabajado con compañías de raspado de pantalla y, a menudo, las API son tan problemáticas (que van desde errores crípticos hasta malos resultados) y, a menudo, no ofrecen la funcionalidad completa que el sitio web ofrece que puede ser mejor eliminar raspaduras (raspar en la web si será). Los portales de la extranet / sitio web se utilizan a más clientes / intermediarios que a los clientes API y, por lo tanto, están mejor soportados. En las grandes empresas, los cambios en los portales de extranet, etc., son infrecuentes, generalmente porque originalmente se subcontrataron y ahora se mantienen. Me refiero más al raspado de la pantalla donde se adapta la salida, por ejemplo. un vuelo en una ruta y hora particulares, una cotización de seguro, una cotización de envío, etc.

En términos de hacerlo, puede ser tan simple como un cliente web para juntar el contenido de la página en una cadena y usar una serie de expresiones regulares para extraer la información que desea.

string pageContents = new WebClient("www.stackoverflow.com").DownloadString();
int numberOfPosts = // regex match

Obviamente, en un entorno a gran escala, estarías escribiendo un código más robusto que el anterior.

  

Un raspador de pantalla descarga el html.   página, y saca los datos   interesado ya sea por la búsqueda de   tokens conocidos o analizándolo como XML o   algunos tales.

Este es un enfoque más limpio que el de expresiones regulares ... en teoría ..., pero en la práctica no es tan fácil, dado que la mayoría de los documentos necesitarán estar normalizados a XHTML antes de que puedas hacerlo, al final encontramos el ajuste fino Las expresiones regulares eran más prácticas.

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