Je recherche un module d'analyse HTML pour Python qui peut m'aider à obtenir les balises sous la forme de listes / dictionnaires / objets Python.
Si j'ai un document du formulaire:
<html>
<head>Heading</head>
<body attr1='val1'>
<div class='container'>
<div id='class'>Something here</div>
<div>Something else</div>
</div>
</body>
</html>
alors cela devrait me donner un moyen d'accéder aux balises imbriquées via le nom ou l'identifiant de la balise HTML afin que je puisse fondamentalement lui demander de m'obtenir le contenu / texte de la div
balise avec class='container'
contenu dans la body
balise, ou quelque chose de similaire.
Si vous avez utilisé la fonction "Inspecter l'élément" de Firefox (voir HTML), vous savez qu'elle vous donne toutes les balises d'une manière bien imbriquée comme un arbre.
Je préférerais un module intégré, mais cela pourrait demander un peu trop.
J'ai traversé 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 peu d'entre eux détaillent la fonctionnalité et se terminent simplement par un débat sur lequel est le plus rapide / le plus efficace.
la source
Réponses:
Vous n'avez pas besoin de descriptions de performances, je suppose - lisez simplement comment fonctionne BeautifulSoup. Regardez sa documentation officielle .
la source
from bs4 import BeautifulSoup
lxml
plutôt la bibliothèque (voir la réponse ci-dessous). Aveccssselect
il est très utile aswell et la performance est souvent de 10 à 100 fois mieux que les autres bibliothèques disponibles.class
attribut est spécial:BeautifulSoup(html).find('div', 'container').text
Je suppose que vous recherchez pyquery :
Un exemple de ce que vous voulez peut être:
Et il utilise les mêmes sélecteurs que l'élément inspect de Firefox ou Chrome. Par exemple:
Le sélecteur d'élément inspecté est 'div # mw-head.noprint'. Donc dans pyquery, il vous suffit de passer ce sélecteur:
la source
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 un bon aperçu.
Performances de l'analyseur HTML Python
Je recommanderais BeautifulSoup même s'il n'est pas intégré. Juste parce qu'il est si facile de travailler avec pour ce genre de tâches. Par exemple:
la source
from bs4 import BeautifulSoup
Par rapport aux autres bibliothèques d'analyseurs,
lxml
c'est extrêmement rapide:Et avec
cssselect
c'est assez facile à utiliser pour gratter des pages HTML aussi:Documentation lxml.html
la source
import requests
, enregistrez le tampon dans un fichier: stackoverflow.com/a/14114741/1518921 (ou urllib), après avoir chargé le fichier enregistré à l'aide de parse,doc = parse('localfile.html').getroot()
1.7
secondes, mais l'application de lxml à la place l'a boosté presque*100
fois plus vite ! Si vous vous souciez de la performance, lxml est la meilleure optionJe recommande lxml pour analyser le HTML. Voir "Analyse HTML" (sur le site lxml).
D'après mon expérience, Beautiful Soup gâche un code HTML complexe. Je pense que c'est parce que Beautiful Soup n'est pas un analyseur, mais plutôt un très bon analyseur de cordes.
la source
Je recommande d'utiliser la bibliothèque justext :
https://github.com/miso-belica/jusText
Utilisation: Python2:
Python3:
la source
J'utiliserais EHP
https://github.com/iogf/ehp
C'est ici:
Production:
la source