Analyse HTML à l'aide de 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>
alors qu'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 le div
tag avec class='container'
contenues dans le body
tag, ou quelque chose de similaire.
Si vous avez utilisé Firefox "Inspecter l'élément" fonction (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.
Je suis passé par beaucoup de questions sur Stack Overflow, et quelques blogs sur internet, et la plupart d'entre eux suggèrent BeautifulSoup ou lxml ou HTMLParser mais quelques-uns de ces détails de la fonctionnalité et simplement la fin du débat sur qui est plus rapide/plus efficace.
- comme tous les autres answerers, je vous recommande de BeautifulSoup, car il est vraiment bien cassé les fichiers HTML.
- double possible de Parsing HTML en Python
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin de la performance descriptions, je suppose - il suffit de lire comment BeautifulSoup œuvres. Regardez ses la documentation officielle.
from bs4 import BeautifulSoup
lxml
de la bibliothèque à la place (voir la réponse ci-dessous). Aveccssselect
il est très utile aswell et de la performance est souvent de 10 à 100 fois meilleure que les autres bibliothèques disponibles.class
attribut est spécial:BeautifulSoup(html).find('div', 'container').text
lxml
est installé;BeautifulSoup
pouvez l'utiliser pour parser du html.parse_only=SoupStrainer(*interesting_parts)
et voir si ça aide.parsed_html = BeautifulSoup(html)
ne fonctionne pas pour moi,parsed_html = BeautifulSoup(html, 'html.parser')
n'Je suppose que ce que vous cherchez est pyquery:
Un exemple de ce que vous voulez peut-être comme:
Et il utilise le même sélecteurs comme Firefox ou google Chrome, inspecter l'élément. Par exemple:
La inspecté sélecteur d'élément est " div#mw-tête.noprint'. Ainsi, dans pyquery, vous avez juste besoin de passer ce sélecteur:
Ici vous pouvez lire plus sur les différents parseurs HTML en Python et leur performance. Même si l'article date un peu il vous offre une bonne vue d'ensemble.
Python HTML analyseur de performances
Je le recommande BeautifulSoup, même si elle n'est pas intégrée dans. Juste parce que c'est si facile de travailler avec ces types de tâches. Par exemple:
from bs4 import BeautifulSoup
Par rapport à l'autre analyseur bibliothèques
lxml
est extrêmement rapide:Et avec
cssselect
c'est assez facile à utiliser pour gratter des pages HTML en trop:lxml.html la Documentation
import requests
, d'économiser de la mémoire tampon dans le fichier: stackoverflow.com/a/14114741/1518921 (ou urllib), après le chargement de fichiers enregistrés à l'aide de l'analyse,doc = parse('localfile.html').getroot()
Je recommande lxml pour l'analyse de code HTML. Voir "Parsing HTML" (sur la lxml site).
Dans mon expérience, Belle Soupe de dégâts sur un peu de code HTML complexe. Je crois que c'est parce que la Belle Soupe n'est pas un analyseur, plutôt une très bonne chaîne de l'analyseur.
Je recommande d'utiliser justext bibliothèque:
https://github.com/miso-belica/jusText
Utilisation:
Python2:
Python3:
Je voudrais utiliser EHP
https://github.com/iogf/ehp
Ici, il est:
De sortie: