BS4:在标签中获取文本

时间:2014-08-11 20:27:53

标签: python html parsing html-parsing beautifulsoup

我正在用美味的汤。有这样的标签:

<li><a href="example"> s.r.o., <small>small</small></a></li>

我想仅在锚<a>标记内获取文本,而不输出输出中的<small>标记;即“ s.r.o.,

我尝试了find('li').text[0],但它不起作用。 BS4中有命令可以做到吗?

由于

4 个答案:

答案 0 :(得分:13)

一个选项是从a元素的contents获取第一个元素:

>>> 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代码并获取previous sibling

>>> 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., 

答案 1 :(得分:2)

使用.children

soup.find('a').children.next()
s.r.o.,

答案 2 :(得分:0)

如果您想循环打印位于html字符串/网页中的锚标签的所有内容(必须使用urllib中的urlopen),则可以这样做:

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>]

答案 3 :(得分:0)

从文档中,可以通过调用 string 属性来检索标签的文本

soup = BeautifulSoup('<li><a href="example"> s.r.o., <small>small</small></a></li>')
res = soup.find('a')
res.small.decompose()
print(res.string)
# s.r.o., 

https://www.crummy.com/software/BeautifulSoup/bs4/doc/#navigablestring