我有一些看起来像这样的HTML:
<div>
Bla bla bla <b>bold stuff</b> Bla bla.
But somewhere else the words bold stuff may appear not in bold
</div>
我想解析此文本以提取粗体元素,将非粗体元素解析为单独的列表:
bolds = ['bold stuff']
normal_test = [
'Bla bla bla ',
'Bla bla.\nBut somewhere else the words bold stuff may appear not in bold'
]
我可能是愚蠢的,但我无法弄清楚如何使用“标准”html解析器来做到这一点。
我可以提取元素的全文,包括粗体,我可以提取粗体,但我发现无法弄清楚每个粗体之前和之后的文本是什么,因为可能存在问题非粗体字符串。
我正在使用lxml,但愿意考虑使用其他解析器的解决方案,或者我不知道的任何聪明的xpath选择器......
但是,否则,我将采用正则表达式......我们都知道,这将是the end of the world
有人可以在太晚之前拯救地球吗?
答案 0 :(得分:1)
所以我认为这是不可能的,但事实证明,如果你使用正确的库,那就不太难了。
使用BeautifulSoup 4,您可以使用.children属性:
html = '''<div>
Bla bla bla <b>bold stuff</b> Bla bla.
But somewhere else the words bold stuff may appear not in bold
</div>'''
import bs4
soup = bs4.BeautifulSoup(html)
print(list(soup.div.children))
[u'\nBla bla bla ',
<b>bold stuff</b>,
u' Bla bla.\nBut somewhere else the words bold stuff may appear not in bold\n']
从那以后实现我想要的东西是相当微不足道的。
如果有人能用lxml做这件事,我还有兴趣吗?