BS4: Получение текста в теге
Я использую красивый суп. Есть такой тег:
<li><a href="example"> s.r.o., <small>small</small></a></li>
Я хочу получить текст только внутри тега привязки <a>
, без тега <small>
в выводе; то есть "s.r.o.,
"
Я попытался find('li').text[0]
, но он не работает.
Есть ли в BS4 команда, которая может это сделать?
Ответы
Ответ 1
Один из вариантов состоит в том, чтобы получить первый элемент из contents
элемента 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.,
Другим было бы найти тег small
и получить предыдущий родной брат:
>>> print soup.find('small').previous_sibling
s.r.o.,
Ну, есть и всевозможные альтернативные/сумасшедшие варианты:
>>> print next(soup.find('a').descendants)
s.r.o.,
>>> print next(iter(soup.find('a')))
s.r.o.,
Ответ 2
Используйте . children
soup.find('a').children.next()
s.r.o.,
Ответ 3
Если вы хотите выполнить цикл для печати всего содержимого тегов привязки, расположенных в строке html/веб-странице (необходимо использовать urlopen из urllib), это работает:
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
Выход:
s.r.o.,
2nd
3rd
a_tag
- список, содержащий все теги привязки; сбор всех тегов привязки в списке, позволяет редактировать группы (если имеется более одного тега <a>
.
>>>print(a_tag)
[<a href="example">s.r.o., <small>small</small></a>, <a href="example">2nd</a>, <a href="example">3rd</a>]