剥离HTML标记以在python中获取字符串

时间:2014-04-07 13:48:08

标签: python html html-parsing beautifulsoup strip

我尝试使用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 :(得分: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))