Pregunta

Por supuesto, una página HTML se puede analizar utilizando cualquier número de analizadores de Python, pero me sorprende que no parezca haber ningún script de análisis público para extraer contenido significativo (excluyendo barras laterales, navegación, etc.) de un documento HTML determinado. .

Supongo que es algo así como recopilar elementos DIV y P y luego verificarlos para obtener una cantidad mínima de contenido de texto, pero estoy seguro de que una implementación sólida incluiría muchas cosas en las que no he pensado.

¿Fue útil?

Solución

Hermosa sopa biblioteca para Python. Cuenta con métodos muy sencillos para extraer información de un archivo html.

Tratar de forma genérica extraer datos de páginas web requerirían la gente a escribir sus páginas de manera similar ... pero hay un número casi infinito de formas de transmitir una página que parece idéntico y mucho menos todos los conbinations que puede tener para transmitir la misma información.

Hubo un determinado tipo de información que estaba tratando de extraer o algún otro objetivo final?

Usted podría intentar extraer cualquier contenido en 'div' y marcadores 'P' y comparar los tamaños relativos de toda la información de la página. Entonces, el problema es que la gente probablemente la información del grupo en colecciones de 'divs y' de p (o al menos lo hacen si están escribiendo HTML bien formado!).

Tal vez si usted formó un árbol de cómo la información se relaciona (nodos serían la 'p' o 'div o cualquier cosa y cada nodo contendría el texto asociado) que podría hacer algún tipo de análisis para identificar los más pequeños' p 'o 'div' que encompases lo que parece ser la mayoría de la información ..?

[EDIT] Tal vez si lo puede conseguir en la estructura de árbol sugerí, que luego podría utilizar un sistema de puntos similar al asesino de spam. Definir algunas reglas que tratan de clasificar la información. Algunos ejemplos:

+1 points for every 100 words
+1 points for every child element that has > 100 words
-1 points if the section name contains the word 'nav'
-2 points if the section name contains the word 'advert'

Si usted tiene una gran cantidad de reglas de puntuación baja que suman cuando encuentre más relevante mirando secciones, creo que podría convertirse en una técnica bastante potente y robusto.

[Edit2] En cuanto a la legibilidad, parece estar haciendo casi exactamente lo que acabo de sugerir! Tal vez podría ser mejorado para tratar de entender mejor las tablas?

Otros consejos

Tener un vistazo a templatemaker: http://www.holovaty.com/writing/templatemaker/

Está escrito por uno de los fundadores de Django. Básicamente le da de comer algunos archivos HTML de ejemplo y que va a generar una "plantilla" que se puede utilizar para extraer sólo los bits que son diferentes (que suele ser el contenido significativo).

Este es un ejemplo de la Google página de códigos :


# Import the Template class.
>>> from templatemaker import Template

# Create a Template instance.
>>> t = Template()

# Learn a Sample String.
>>> t.learn('<b>this and that</b>')

# Output the template so far, using the "!" character to mark holes.
# We've only learned a single string, so the template has no holes.
>>> t.as_text('!')
'<b>this and that</b>'

# Learn another string. The True return value means the template gained
# at least one hole.
>>> t.learn('<b>alex and sue</b>')
True

# Sure enough, the template now has some holes.
>>> t.as_text('!')
'<b>! and !</b>'

Es posible utilizar el boilerpipe aplicación web a buscar y extraer el contenido sobre la marcha.

(Esto no es específico de Python, ya que sólo se necesita una petición GET HTTP a una página en Google App Engine).

Saludos,

Christian

Lo que es significativo y lo que no lo es, depende de la semántica de la página. Si la semántica es malo, su código no va a "adivinar" lo que es significativo. Yo uso la legibilidad, el cual se conectó en el comentario, y veo que en muchas páginas trato de leer que no proporciona ningún resultado, no estamos hablando de una decente.

Si alguien pone el contenido de una tabla, estás condenado. Trate de lectura en un foro phpBB verá lo que quiero decir.

Si desea hacerlo, ir con una expresión regular en <p></p>, o analizar el DOM.

Ganso es sólo la biblioteca para esta tarea.Para citar su README:

Goose intentará extraer la siguiente información:

  • Texto principal de un artículo.
  • Imagen principal del artículo.
  • Cualquier película de Youtube/Vimeo incluida en el artículo.
  • Metadescripción
  • metaetiquetas
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top