我正在使用beautifulsoup从html字符串中提取图像和链接。这一切都很好,但是有些链接在链接内容中有一个标记会引发错误。
示例链接:
<a href="http://www.example.com"><strong>Link Text</strong></a>
Python代码:
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有关吗?
答案 0 :(得分:11)
要抓取代码的文本内容,element.get_text()
method可让您从当前元素中抓取(剥离)文本,包括标记:
print link.get_text(' ', strip=True)
第一个参数用于连接所有文本元素,坐strip
到True
表示所有文本元素首先被剥离前导和尾随空格。在大多数情况下,这为您提供了整洁的处理文本。
您还可以使用.stripped_strings
iterable:
print u' '.join(link.stripped_strings)
基本上是相同的效果,但您可以选择首先处理或过滤剥离的字符串。
要获取内容,请在每个子项上使用str()
或unicode()
:
print u''.join(unicode(item) for item in link)
适用于包含的Element
和NavigableString
个项目。