Comment puis-je analyser HTML avec html5lib, et d'interroger le HTML analysée avec XPath?
Je suis en train d'utiliser html5lib de parser une page html à quelque chose que je peux requête xpath. html5lib est proche de zéro, la documentation et j'ai passé trop de temps à essayer de comprendre ce problème. But ultime est de sortir la deuxième ligne du tableau:
<html>
<table>
<tr><td>Header</td></tr>
<tr><td>Want This</td></tr>
</table>
</html>
donc permet de l'essayer:
>>> doc = html5lib.parse('<html><table><tr><td>Header</td></tr><tr><td>Want This</td> </tr></table></html>', treebuilder='lxml')
>>> doc
<lxml.etree._ElementTree object at 0x1a1c290>
qui ressemble bien, permet de voir ce que nous avons:
>>> root = doc.getroot()
>>> print(lxml.etree.tostring(root))
<html:html xmlns:html="http://www.w3.org/1999/xhtml"><html:head/><html:body><html:table><html:tbody><html:tr><html:td>Header</html:td></html:tr><html:tr><html:td>Want This</html:td></html:tr></html:tbody></html:table></html:body></html:html>
LOL WUT?
au sérieux. J'ai été la planification sur l'utilisation de certains xpath pour obtenir les données que je veux, mais cela ne semble pas fonctionner. Que puis-je faire? Je suis prêt à essayer différentes bibliothèques et des approches.
OriginalL'auteur Dan.StackOverflow | 2010-04-01
Vous devez vous connecter pour publier un commentaire.
Manque de documentation est une bonne raison pour éviter une bibliothèque de l'OMI, peu importe comment il est cool. Êtes-vous attaché à l'aide de html5lib? Avez-vous regardé lxml.html?
Ici est une façon de le faire avec lxml:
Résultat:
OriginalL'auteur Ryan Ginstrom
Ce que vous voulez utiliser est le
namespaceHTMLElements
argument, qui, pour une raison quelconque valeur par défaut est True.Il est probablement plus facile à utiliser lxml.html toutefois.
La valeur par défaut est
True
parce que la spécification HTML définit ces éléments dans le code HTML de l'espace de noms existants, de Python, de l'outillage nécessite de ne pas être est la raison pour laquelle l'option existe.OriginalL'auteur sciyoshi
Je le recommande toujours à essayer
lxml
de la bibliothèque. Il est incroyablement rapide et possède de nombreuses fonctionnalités.Il a aussi un support pour html5lib analyseur si vous avez besoin d': html5parser
OriginalL'auteur Ruslan Spivak
Avec BeautifulSoup, vous pouvez le faire avec
(Évidemment que c'est vraiment un exemple brut, mais ya.)
OriginalL'auteur Ismail Badawi
je crois que vous pouvez le faire en css de recherche sur lxml objets.. comme
OriginalL'auteur z33m
Depuis html5lib (par défaut) crée des arbres qui contiennent (correcte) de l'espace de noms d'informations que vous avez spécifié (le droit) les espaces de noms dans vos requêtes, en tant que bien.
Exemple avec une requête XPath:
De sortie:
Le même résultat sans XPath:
Alternativement, vous pouvez aussi dire html5lib pour éviter l'ajout de tout espace de l'information au cours de l'analyse:
De sortie:
OriginalL'auteur maxschlepzig
essayer à l'aide de jquery. et vous pouvez récupérer tous les éléments. alternativement, vous pouvez mettre un id sur votre ligne et retirez-la.
1) ... ...
$("td")[1].innerHTML sera ce que vous voulez
2) ... ...
$("#bla").texte() sera ce que vous voulez
OriginalL'auteur yamspog