2011-10-31 2 views
1

J'ai besoin d'analyser le HTML, mais je n'ai pas besoin de la bibliothèque d'analyse Python pour tenter de "réparer" le HTML. Des suggestions sur un outil ou une méthode à utiliser (en python)? Dans ma situation, si le code HTML est mal formé, mon script doit terminer le traitement. J'ai essayé BeautifulSoup mais ça a arrangé des choses que je ne voulais pas que ça répare. Je crée un outil pour analyser les fichiers modèles et afficher un autre style de modèle converti.Parser HTML En Python sans correction HTML

+0

Vous cherchez un code déjà créé ou Voulez-vous coder votre propre analyseur? – Victor

+0

Je suppose qu'un bon point de départ serait ce que vous essayez de réparer? –

+0

Il a dit qu'il ne veut rien réparer. – Victor

Répondre

1

Je crois BeautifulStoneSoup peut le faire si vous passez dans une liste des balises à fermeture automatique

La lacune la plus courante de BeautifulStoneSoup est qu'il ne sait pas sur les balises à fermeture automatique. HTML a un ensemble fixe de balises à fermeture automatique, mais avec XML, cela dépend de ce que dit la DTD. Vous pouvez dire BeautifulStoneSoup que certaines balises sont auto-fermeture en passant dans leurs noms comme argument selfClosingTags au constructeur:

from BeautifulSoup import BeautifulStoneSoup 
xml = "<tag>Text 1<selfclosing>Text 2" 
print BeautifulStoneSoup(xml).prettify() 
# <tag> 
# Text 1 
# <selfclosing> 
# Text 2 
# </selfclosing> 
# </tag> 

print BeautifulStoneSoup(xml, selfClosingTags=['selfclosing']).prettify() 
# <tag> 
# Text 1 
# <selfclosing /> 
# Text 2 
# </tag> 
3

Le livre Foundations of Python Network Programming a une comparaison détaillée de ce qu'il ressemble à gratter la même page web avec Beautiful Soup et avec la bibliothèque lxml; mais, en général, vous trouverez que lxml est plus rapide, plus efficace et possède une API qui adhère étroitement à un standard Python (l'API ElementTree, fournie avec la bibliothèque standard Python). Voir ce billet de blog par l'inimitable Ian Bicking pour avoir une idée des raisons pour lesquelles vous devriez regarder lxml au lieu de l'ancienne Belle bibliothèque de soupe pour l'analyse syntaxique HTML:

http://blog.ianbicking.org/2008/12/10/lxml-an-underappreciated-web-scraping-library/

+0

L'analyseur XML standard de lxml lèvera l'exception sur le HTML malformé, et son analyseur HTML, corrigera quand même les erreurs. –

+0

Oui, bon point - assurez-vous toujours d'utiliser l'analyseur HTML par défaut de lxml, jamais son analyseur XML standard, lorsque vous essayez de gratter une page web! :) –