Pregunta

Actualmente estoy intentando eliminar un sitio web que tiene HTML con un formato bastante deficiente (a menudo faltan etiquetas de cierre, no se utilizan clases o identificadores, por lo que es increíblemente difícil ir directamente al elemento que desea, etc.).He estado usando BeautifulSoup con cierto éxito hasta ahora, pero de vez en cuando (aunque muy raramente), me encuentro con una página donde BeautifulSoup crea el árbol HTML de manera un poco diferente a (por ejemplo) Firefox o Webkit.Si bien esto es comprensible ya que el formato del HTML lo deja ambiguo, si pudiera obtener el mismo árbol de análisis que produce Firefox o Webkit, podría analizar las cosas mucho más fácilmente.Los problemas suelen ser algo así como que el sitio abre un <b> etiqueta dos veces y cuando BeautifulSoup ve la segunda <b> etiqueta, cierra inmediatamente la primera mientras Firefox y Webkit anidan la <b> etiquetas.

¿Existe una biblioteca de raspado web para Python (o incluso cualquier otro lenguaje (me estoy desesperando)) que pueda reproducir el árbol de análisis generado por Firefox o WebKit (o al menos acercarse más que BeautifulSoup en casos de ambigüedad)?

¿Fue útil?

Solución

BeautifulSoup como constructor árbol por html5lib :

from html5lib import HTMLParser, treebuilders

parser = HTMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup"))

text = "a<b>b<b>c"
soup = parser.parse(text)
print soup.prettify()

Salida:

<html>
 <head>
 </head>
 <body>
  a
  <b>
   b
   <b>
    c
   </b>
  </b>
 </body>
</html>

Otros consejos

pyWebKitGTK parece que podría ser de alguna ayuda.

También en este caso es un tipo que tenía que hacer lo mismo, pero conseguir la exportación del contenido después corrió javascript, ejecutar javascript de Python usando pyWebKitGTK .

pyWebkitGTK en el cheeseshop .

También puede hacer esto con pyqt .

scrapy ?

  

Scrapy es una pantalla rápida de alto nivel   raspado y rastreo web marco,   utilizado para sitios web de rastreo y extracto   datos estructurados de sus páginas. Eso   puede ser utilizado para una amplia gama de   propósitos, desde la minería de datos para   Control y pruebas automatizado.

Se puede conducir un navegador de su elección con SeleniumRC .

Es posible que desee echar un vistazo a Mechanize módulo:

http://wwwsearch.sourceforge.net/mechanize/

Bueno, WebKit es de código abierto por lo que podría utilizar su propio programa de análisis (en el componente WebCore), si cualquier idioma es aceptable

Ian Bicking escribió una vez que sorprendentemente lxml podría ser mejor en el análisis de sopas BeautifulSoup: http://blog.ianbicking.org/2008/12/10/lxml-an-underappreciated-web-scraping-library/ (Sólo para referencia mencionar, paraíso' t intentó que en lo personal)

puede utilizar analizador lxml, en el BeautifulSoup, y utiliza XPath para encontrar los datos de la página HTML sin formato, puede copiar el XPath cuando inspeccione elemento utilizando Firebug.

Se puede extraer de este tutorial: http://www.youtube.com/watch?v=PgWfF-Ut0zM

De la documentación parece que No puedo creer que sea hermosa. analizador es lo que quieres:

Icantbelieveitsbeautifulsoup también es una subclase de Beautifulsoup.Tiene heurísticas HTML que se ajustan más estrechamente al estándar HTML, pero ignora cómo se usa HTML en el mundo real.Por ejemplo, es html válido para anidar u003CB>las etiquetas, pero en el mundo real, una u003CB>etiqueta anidada casi siempre significa que el autor olvidó cerrar la primera u003CB>etiqueta.u003C/b>u003C/b>u003C/b>Si te encuentras con alguien que realmente nesta u003CB>etiquetas, entonces puedes usar icantbelieveitsbeautifulsoup.u003C/b>

éste se ve bien que me lo estoy usando mi mismo: enlace

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