2010-03-07 13 views
10

Actualmente estoy tratando de robar un sitio web que tiene un formato HTML pobremente formateado (a menudo faltan etiquetas de cierre, sin uso de 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 el momento, pero de vez en cuando (aunque muy raramente), me encuentro con una página donde BeautifulSoup crea el árbol HTML de una forma un tanto diferente a (por ejemplo) Firefox o Webkit. Si bien esto es comprensible ya que el formato del HTML deja esto ambiguo, si pudiera obtener el mismo árbol de análisis sintáctico que Firefox o Webkit, sería capaz de analizar las cosas mucho más fácilmente. Los problemas suelen ser algo así como que el sitio abre una etiqueta <b> dos veces y cuando BeautifulSoup ve la segunda etiqueta <b>, inmediatamente cierra la primera mientras Firefox y Webkit anidan las etiquetas <b>.Web scraping con Python

Existe una biblioteca web para Python (o incluso cualquier otro idioma (me estoy desesperando)) que puede reproducir el árbol de análisis generado por Firefox o WebKit (o al menos estar más cerca que BeautifulSoup en casos de ambigüedad) .

+0

Por qué no usar WebKit sí? Webkit es de código abierto. Sí, tomará un poco de tiempo acostumbrarse. –

+1

¿Le has contado al grupo beautifulsoup? Probablemente estén interesados ​​en las cajas de esquina como la suya http://groups.google.com/group/beautifulsoup –

+0

cuando se las pregunta tantas veces ... –

Respuesta

10

Uso BeautifulSoup como constructor de árboles para 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> 
1

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

2

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

3

han intentado scrapy?

Scrapy es un marco de alto nivel rápido pantalla raspado y rastreo web, utilizado para rastrear sitios web y extraer datos estructurados de sus páginas. Es se puede utilizar para una amplia gama de fines, desde la extracción de datos a de monitoreo y pruebas automatizadas.

0

De la documentación parece que ICantBelieveItsBeautifulSoup analizador es lo que quiere:

ICantBelieveItsBeautifulSoup también es una subclase de BeautifulSoup. Tiene HTML heurística que se ajustan más estrechamente a al estándar HTML, pero ignora cómo se usa HTML en el mundo real. Para ejemplo, es HTML válido para anidar <B> etiquetas, pero en el mundo real un anidado <B> etiqueta casi siempre significa que el autor se olvidó de cerrar la primera etiqueta <B> . Si se encuentra con alguien que anida realmente <B> etiquetas, entonces puede usar ICantBelieveItsBeautifulSoup.

0

éste se ve bien que me lo estoy usando mi mismo: link [http://code.google.com/p/webscraping/]

1

puede utilizar analizador lxml, en el BeautifulSoup, y usted usa xpath para encontrar los datos en la página html sin formato, puede copiar el xpath cuando inspeccione el elemento usando firebug.

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