在Python中去除HTML标签获取字符串
我尝试用BeautifulSoup从一个HTML文件中提取一些字符串,但每次操作时得到的结果总是不完整。
我想获取每个li元素或标签中的字符串。到目前为止,我已经能像这样获取ul中的所有内容。
#!/usr/bin/python
from bs4 import BeautifulSoup
page = open("page.html")
soup = BeautifulSoup(page)
source = soup.select(".sidebar li")
而我得到的结果是这样的:
[<li class="first">
Def Leppard - Make Love Like A Man<span>Live</span> </li>, <li>
Inxs - Never Tear Us Apart </li>, <li>
Gary Moore - Over The Hills And Far Away </li>, <li>
Linkin Park - Numb </li>, <li>
Vita De Vie - Basul Si Cu Toba Mare </li>, <li>
Nazareth - Love Hurts </li>, <li>
U2 - I Still Haven't Found What I'm L </li>, <li>
Blink 182 - All The Small Things </li>, <li>
Scorpions - Wind Of Change </li>, <li>
Iggy Pop - The Passenger </li>]
我只想获取这些字符串。
3 个回答
0
这个例子来自于文档,它提供了一个非常简洁的一行代码。
''.join(BeautifulSoup(source).findAll(text=True))
1
遍历结果并获取 text
属性的值:
for element in soup.select(".sidebar li"):
print element.text
示例:
from bs4 import BeautifulSoup
data = """
<body>
<ul>
<li class="first">Def Leppard - Make Love Like A Man<span>Live</span> </li>
<li>Inxs - Never Tear Us Apart </li>
</ul>
</body>
"""
soup = BeautifulSoup(data)
for element in soup.select('li'):
print element.text
输出:
Def Leppard - Make Love Like A ManLive
Inxs - Never Tear Us Apart
2
可以使用Beautiful Soup的.strings方法。
for string in soup.stripped_strings:
print(repr(string))
根据文档:
如果一个标签里面有多个内容,你仍然可以只查看这些内容的字符串。可以使用.strings生成器:
或者
这些字符串通常会有很多多余的空格,你可以使用.stripped_strings生成器来去掉这些空格: