python - tutorial - para que se usa elastic search
¿Cuál es el analizador HTML más tolerante en Python? (4)
Con páginas que no funcionan con nada más (me vienen a la mente las que contienen elementos <form>
anidados) he tenido éxito con MinimalSoup y ICantBelieveItsBeautifulSoup . Cada uno puede manejar ciertos tipos de error que el otro no puede con tanta frecuencia que tendrá que probar ambos.
Tengo un código HTML aleatorio y usé BeautifulSoup para analizarlo, pero en la mayoría de los casos (> 70%) se bloquea. Intenté usar Beautiful soup 3.0.8 y 3.2.0 (hubo algunos problemas con 3.1.0 en adelante), pero los resultados son casi los mismos.
Puedo recordar varias opciones de analizador de HTML disponibles en Python desde lo más alto de mi cabeza:
- BeautifulSoup
- lxml
- pyquery
Tengo la intención de probar todos estos, pero quería saber cuál en sus pruebas es más indulgente e incluso puede intentar analizar HTML incorrecto.
Si beautifulsoup no soluciona el problema html, la siguiente mejor solución sería la expresión regular. lxml, elementtree, minidom son muy estrictos en el análisis y en realidad lo están haciendo bien.
Otros consejos:
Paso el navegador html a lynx a través del símbolo del sistema, y saco la versión de texto de la página / contenido y analizo utilizando expresiones regulares.
La conversión a html a texto o html a markdown elimina todas las etiquetas html y usted se quedará con el texto. Eso es fácil de analizar.
Terminé usando BeautifulSoup 4.0 con html5lib para el análisis sintáctico y es mucho más indulgente, con algunas modificaciones en mi código ahora está trabajando bastante bien, gracias a todos por sus sugerencias.
Todos son. Aún no he encontrado ninguna página html encontrada en la naturaleza que lxml.html no haya podido analizar. Si lxml barfs en las páginas que intentas analizar, siempre puedes preprocesarlas usando algunas expresiones regulares para mantener lxml feliz.
lxml en sí mismo es bastante estricto, pero lxml.html
es un analizador diferente y puede manejar html muy rotos. Para extremadamente rompehtml, lxml también se envía con lxml.html.soupparser
que interactúa con la biblioteca BeautifulSoup.
Algunos enfoques para analizar html roto utilizando lxml.html se describen aquí: http://lxml.de/elementsoup.html