我尝试使用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>]
我只想从中得到字符串。
答案 0 :(得分:2)
使用美丽的汤 - .strings方法。
for string in soup.stripped_strings:
print(repr(string))
来自文档:
如果标签内有多个内容,您仍然可以查看 只是字符串。使用.strings生成器:
或
这些字符串往往会有很多额外的空格,您可以这样做 请改为使用.stripped_strings生成器删除:
答案 1 :(得分: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 :(得分:0)
来自documentation的这个例子给出了一个非常好的一个班轮。
''.join(BeautifulSoup(source).findAll(text=True))