2010-03-07 6 views
10

J'essaye actuellement de gratter un site web qui a un format HTML assez mal formaté (il manque souvent des balises fermantes, pas d'utilisation de classes ou d'ids, donc c'est incroyablement difficile d'aller directement à l'élément que vous voulez, etc.). J'utilise BeautifulSoup avec un certain succès jusqu'à présent, mais de temps en temps (mais rarement), je tombe sur une page où BeautifulSoup crée l'arbre HTML un peu différemment de (par exemple) Firefox ou Webkit. Bien que cela soit compréhensible car le formatage du HTML laisse cette ambiguïté, si j'étais capable d'obtenir le même arbre d'analyse que Firefox ou Webkit produit, je serais capable d'analyser les choses beaucoup plus facilement. Les problèmes sont généralement quelque chose comme le site ouvre une étiquette <b> deux fois et quand BeautifulSoup voit la deuxième balise <b>, il se ferme immédiatement le premier nid tandis que Firefox et Webkit les <b> tags.Web scraping avec Python

Y a-t-il une librairie de grattage web pour Python (ou même tout autre langage (je deviens désespéré)) qui peut reproduire l'arbre d'analyse généré par Firefox ou WebKit (ou au moins se rapprocher de BeautifulSoup en cas d'ambiguïté) .

+0

Pourquoi ne pas utiliser WebKit lui-même? Webkit est open source. Oui, il faudra un peu de temps pour s'y habituer. –

+1

Avez-vous dit au groupe beautifulsoup? Ils sont probablement intéressés par les coins comme le vôtre http://groups.google.com/group/beautifulsoup –

+0

Demandé tant de fois ... –

Répondre

10

Utilisez BeautifulSoup comme constructeur de l'arbre pour 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() 

Sortie:

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

Eh bien, WebKit est open source pour que vous puissiez utiliser son propre analyseur (dans le composant WebCore), si une langue est acceptable

2

Vous pouvez conduire un navigateur de votre choix avec SeleniumRC.

3

Avez-vous essayé scrapy?

Scrapy est un cadre racler écran de haut niveau rapide et exploration du Web, utilisé pour analyser des sites Web et d'extraire des données structurées de leurs pages. Il peut être utilisé pour une large gamme de , de l'exploration de données à la surveillance et aux tests automatisés.

0

De la documentation, il semble que l'analyseur ICantBelieveItsBeautifulSoup est ce que vous voulez:

ICantBelieveItsBeautifulSoup est aussi une sous-classe de BeautifulSoup. Il a HTML heuristiques qui se conforment plus étroitement à la norme HTML, mais ignorer comment HTML est utilisé dans le monde réel. Pour exemple, il est valide HTML pour nicher <B> balises, mais dans le monde réel une balise imbriquée <B> signifie presque toujours que l'auteur a oublié de fermer la première balise <B> . Si vous rencontrez quelqu'un qui niche en réalité <B>, alors vous pouvez utiliser ICantBelieveItsBeautifulSoup.

0

celui-ci me semble bon que je l'utilise moi-même: lien [http://code.google.com/p/webscraping/]

1

vous pouvez utiliser l'analyseur lxml, dans le beautifulsoup, et vous utilisez xpath pour trouver les données dans une page html non formatée, vous pouvez copier le xpath lorsque vous inspectez un élément en utilisant firebug.

Vous pouvez consulter ce tutoriel: http://www.youtube.com/watch?v=PgWfF-Ut0zM

Questions connexes