À l'aide de BeautifulSoup de trouver une balise HTML qui contient un certain texte
Je vais essayer d'obtenir les éléments HTML doc qui contiennent le motif suivant du texte: #\S{11}
<h2> this is cool #12345678901 </h2>
Donc, la précédente correspond à l'aide de:
soup('h2',text=re.compile(r' #\S{11}'))
Et que le résultat serait quelque chose comme:
[u'blahblah #223409823523', u'thisisinteresting #293845023984']
Je suis en mesure d'obtenir tout le texte qui lui correspond (voir ligne ci-dessus). Mais je veux le parent de l'élément de texte à rechercher, afin que je puisse l'utiliser comme un point de départ pour parcourir l'arborescence du document. Dans ce cas, je veux tous les h2 éléments de revenir, de ne pas les correspondances de texte.
Idées?
- En fait, le h2 restriction est ignorée selon la BeautifulSoup documentation: "Si vous utilisez du texte, toutes les valeurs que vous donnez le nom et le mot-clé arguments sont ignorés."
- Pas sûr de ce que la situation était en 2010, mais ici 2012 conclut que l'utilisation
text
(oustring
qui l'a remplacé) ne serait pas ignorer tous les autres restrictions
Vous devez vous connecter pour publier un commentaire.
Imprime:
.parent
était génial! Je n'ai jamais pensé à ce sujet. Merci @nosklo. +1.parent
. A utiliser PyCharm du débogueur pour réaliser que c'était pas une simple chaîne de caractères.BeautifulSoup des opérations de recherche livrer [une liste de]
BeautifulSoup.NavigableString
objets lorsquetext=
est utilisé comme un critère plutôtBeautifulSoup.Tag
dans les autres cas. Vérification de l'objet du__dict__
de voir les attributs disponibles pour vous. De ces attributs,parent
est favorisée par rapport àprevious
en raison de les changements dans BS4.soup.find('h2', text=pattern)
donne à la balise directement, pas besoin d'appeler.parent
. Aussi le documentation dit que vous pouvez combiner l'string
(text
dans les versions précédentes) paramètre avec des arguments qui permettent de trouver des balises. Dans ce cas BeautifulSoup sera le retour de la baliseAvec bs4 (Belle Soupe 4), l'OP tentative fonctionne exactement comme prévu:
retourne
[<h2> this is cool #12345678901 </h2>]
.