Question

J'essaie actuellement de gratter un site Web dont le HTML est assez mal formaté (balises de fermeture souvent manquantes, aucune utilisation de classes ou d'identifiants, il est donc incroyablement difficile d'accéder directement à l'élément souhaité, etc.).J'utilise BeautifulSoup avec un certain succès jusqu'à présent, mais de temps en temps (bien que assez rarement), je tombe sur une page où BeautifulSoup crée l'arborescence HTML un peu différemment de (par exemple) Firefox ou Webkit.Bien que cela soit compréhensible car le formatage du HTML laisse cela ambigu, si je pouvais obtenir le même arbre d'analyse que celui produit par Firefox ou Webkit, je serais en mesure d'analyser les choses beaucoup plus facilement.Les problèmes sont généralement dus au fait que le site ouvre un <b> tag deux fois et quand BeautifulSoup voit le deuxième <b> balise, il ferme immédiatement la première tandis que Firefox et Webkit emboîtent la <b> Mots clés.

Existe-t-il une bibliothèque de web scraping pour Python (ou même pour tout autre langage (je commence à désespérer)) capable de reproduire l'arbre d'analyse généré par Firefox ou WebKit (ou du moins de se rapprocher de BeautifulSoup en cas d'ambiguïté).

Était-ce utile?

La solution

Utilisez BeautifulSoup en tant que constructeur d'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>

Autres conseils

pyWebKitGTK ressemble à cela pourrait être un peu d'aide.

Aussi est un mec ici qui a dû faire la même chose, mais obtenir l'exportation du contenu après javascript couru, exécuter javascript de python en utilisant pyWebKitGTK.

pyWebkitGTK au fromagerie .

Vous pouvez également faire avec PyQt.

avez-vous essayé scrapy ?

  

Scrapy est un rapide écran de haut niveau   grattage et cadre exploration du Web,   utilisé pour explorer les sites Web et extrait   données structurées de leurs pages. Il   peut être utilisé pour une large gamme de   fins, de l'extraction de données à   le suivi et les tests automatisés.

Vous pouvez conduire un navigateur de votre choix avec SeleniumRC .

Vous pouvez jeter un oeil sur le module Mechanize:

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

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

Ian Bicking a écrit que étonnamment lxml pourrait être mieux à l'analyse syntaxique des soupes que BeautifulSoup: http://blog.ianbicking.org/2008/12/10/lxml-an-underappreciated-web-scraping-library/ (Il suffit de mentionner à titre de référence, havre de paix » t essayé personnellement)

vous pouvez utiliser l'analyseur lxml, dans le beautifulsoup, et que vous utilisez XPath pour trouver les données à la page html non formaté, vous pouvez copier le XPath lorsque vous inspectez élément en utilisant Firebug.

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

D'après la documentation, il semble que ICantBelieveItsBeautifulSoup l'analyseur est ce que vous voulez :

IcantBelieveitsBeautifulSoup est également une sous-classe de BeautifulSoup.Il a une heuristique HTML qui se conforme plus étroitement à la norme HTML, mais ignorez comment le HTML est utilisé dans le monde réel.Par exemple, il est valable du HTML de u003CB>nicher, mais dans le monde réel, une u003CB>balise imbriquée signifie presque toujours que l'auteur a oublié de fermer la première u003CB>balise.u003C/b>u003C/b>u003C/b>Si vous rencontrez quelqu'un qui niche réellement u003CB>les balises, vous pouvez utiliser IcantBelieveitsBeautifulSoup.u003C/b>

celui-ci me semble bon que je l'utilise moi-même: lien

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top