223 votes

Analyser HTML Python

Je suis à la recherche d'un Analyseur HTML module python qui peut m'aider à obtenir les étiquettes sous forme de listes Python/dictionnaires/objets

Si j'ai un document de la forme:

<html>
<head>Heading</head>
<body attr1='val1'>
    <div class='container'>
        <div id='class'>Something here</div>
        <div>Something else</div>
    </div>
</body>
</html>

Ensuite, il devrait me donner un chemin pour accéder aux balises imbriquées par le nom ou l'id de la balise html.

De sorte que je pouvais lui demander de m'obtenir le contenu/texte dans la balise div class= "container" contenue dans la balise body, Ou quelque chose de similaire.

Si vous avez utilisé firefox inspecter l'élément caractéristique (HTML), vous savez qu'il vous donne toutes les balises dans un joli imbriqués, comme un arbre.

Je préfère un module intégré mais que demandez peut-être même un peu trop.


J'ai traversé beaucoup de Questions sur la stackoverflow site web et des blogs sur internet, et la plupart d'entre eux suggèrent BeautifulSoup ou lxml ou HTMLParser(intégré), mais quelques-uns de ces détails de la fonctionnalité et simplement la fin du débat sur qui est plus rapide/plus efficace.

Je Comprends que mes exigences sont vagues, donc Si vous avez d'autres informations dont vous auriez besoin d ' /comme n'hésitez pas à demander.

246voto

Aadaam Points 1109

Je peux donc lui demander de me fournir le contenu / texte de la balise div avec class = 'conteneur' contenu dans la balise body, ou quelque chose de similaire.

 from BeautifulSoup import BeautifulSoup
html = #the HTML code you've written above
parsed_html = BeautifulSoup(html)
print parsed_html.body.find('div', attrs={'class':'container'}).text
 

Vous n'avez pas besoin de descriptions de performances, je suppose - lisez simplement le fonctionnement de BeautifulSoup. Regardez sa documentation officielle .

101voto

YusuMishi Points 619

Je suppose que ce que vous cherchez est pyquery:

pyquery: un jquery-comme la bibliothèque pour python.

Un exemple de ce que vous voulez peut-être comme:

from pyquery import PyQuery    
html = # Your HTML CODE
pq = PyQuery(html)
tag = pq('div#class')
print tag.text()

Et il utilise le même sélecteurs comme firefox ou google chrome, inspecter l'élément. par exemple:

the element selector is 'div#mw-head.noprint'

le inspecté sélecteur d'élément est " div#mw-tête.noprint'. Ainsi, dans pyquery, vous avez juste besoin de passer ce sélecteur:

pq('div#mw-head.noprint')

44voto

Qiau Points 1791

Ici, vous pouvez en savoir plus sur les différents analyseurs HTML en Python et leurs performances. Même si l'article est un peu daté, il vous donne quand même une bonne vue d'ensemble.

Performances de l'analyseur HTML Python

Je recommanderais BeautifulSoup même s'il n'est pas intégré. Simplement parce qu'il est si facile de travailler avec ce genre de tâches. Par exemple:

 import urllib2
from BeautifulSoup import BeautifulSoup

page = urllib2.urlopen('http://www.google.com/')
soup = BeautifulSoup(page)

x = soup.body.find('div', attrs={'class' : 'container'}).text
 

9voto

Je recommande lxml pour l'analyse HTML. Voir "Analyse HTML" (sur le site lxml).

D'après mon expérience, Beautiful Soup gâche du HTML complexe. Je pense que c'est parce que Beautiful Soup n'est pas un analyseur, mais un très bon analyseur de chaînes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X