J'utilise une belle soupe. Il y a une balise comme celle-ci:
<li><a href="example"> s.r.o., <small>small</small></a></li>
Je veux obtenir le texte dans la balise d'ancrage <a>
Uniquement, sans aucune balise <small>
Dans la sortie; c'est-à-dire "s.r.o.,
"
J'ai essayé find('li').text[0]
mais cela ne fonctionne pas.
Y a-t-il une commande dans BS4 qui peut faire cela?
Une option serait d'obtenir le premier élément de contents
de l'élément a
:
>>> from bs4 import BeautifulSoup
>>> data = '<li><a href="example"> s.r.o., <small>small</small></a></li>'
>>> soup = BeautifulSoup(data)
>>> print soup.find('a').contents[0]
s.r.o.,
Un autre serait de trouver la balise small
et d'obtenir le frère précédent :
>>> print soup.find('small').previous_sibling
s.r.o.,
Eh bien, il existe également toutes sortes d'options alternatives/folles:
>>> print next(soup.find('a').descendants)
s.r.o.,
>>> print next(iter(soup.find('a')))
s.r.o.,
Utilisez . Enfants
soup.find('a').children.next()
s.r.o.,
Si vous souhaitez faire une boucle pour imprimer tout le contenu des balises d'ancrage situées dans la chaîne/page Web html (doit utiliser urlopen à partir de urllib), cela fonctionne:
from bs4 import BeautifulSoup
data = '<li><a href="example">s.r.o., <small>small</small</a></li> <li><a href="example">2nd</a></li> <li><a href="example">3rd</a></li>'
soup = BeautifulSoup(data,'html.parser')
a_tag=soup('a')
for tag in a_tag:
print(tag.contents[0]) #.contents method to locate text within <a> tags
Production:
s.r.o.,
2nd
3rd
a_tag
est une liste contenant toutes les balises d'ancrage; la collecte de toutes les balises d'ancrage dans une liste, permet la modification de groupe (si plusieurs <a>
balises présentes.
>>>print(a_tag)
[<a href="example">s.r.o., <small>small</small></a>, <a href="example">2nd</a>, <a href="example">3rd</a>]