6

我正在使用 beautifulsoup 从 html 字符串中提取图像和链接。这一切都很好,但是对于某些在链接内容中有标签的链接,它会引发错误。

示例链接:

<a href="http://www.example.com"><strong>Link Text</strong></a>

蟒蛇代码:

soup = BeautifulSoup(contents)
links = soup.findAll('a')
for link in links:
    print link.contents # generates error
    print str(link.contents) # outputs [Link Text]

错误信息:

TypeError: sequence item 0: expected string, Tag found

我真的不想遍历链接文本中的任何子标签,我只想返回原始内容,这对 BS 可行吗?

4

1 回答 1

15

要仅获取标签的文本内容,该element.get_text()方法允许您从当前元素(包括标签)中获取(剥离)文本:

print link.get_text(' ', strip=True)

第一个参数用于连接所有文本元素,而坐到strip意味着True所有文本元素首先被去除前导和尾随空格。在大多数情况下,这为您提供了整洁的处理文本。

您还可以使用.stripped_strings可迭代的:

print u' '.join(link.stripped_strings)

这基本上是相同的效果,但您可以选择先处理或过滤剥离的字符串。

要获取内容,请在每个子项上使用str()或:unicode()

print u''.join(unicode(item) for item in link)

这将适用于两者ElementNavigableString所包含的项目。

于 2013-01-10T17:51:01.157 回答