0

我想在 Python 中将 HTML 转换为纯文本,我希望结果看起来像是从浏览器中复制的。我尝试了许多库,如html2texthtml-textBeautifulSoup,但没有一个能得到我想要的结果。例如,以下 HTML:

<div>aaa</div> <div>AAA</div>
<div><br></div>
<div>bbb</div> <div>BBB</div>
<div><br></div>
<div>ccc</div> <div>CCC</div>

在浏览器中看起来像这样:

aaa
AAA

bbb
BBB

ccc
CCC

但是当我使用html2text时,结果是

aaa

AAA



bbb

BBB



ccc

CCC



html-text的结果是

aaa
AAA
bbb
BBB
ccc
CCC

BeautifulSoup只是删除了标签:


aaa AAA

bbb BBB

ccc CCC

好吧,我也尝试过soup.get_text('\n')soup.get_text('\n', strip=True)但无法获得正确的结果。

有没有人有解决问题的好方法?非常感谢。

4

2 回答 2

1

正如@dabingsou 所说

此代码是使用函数的通用解决方案

from simplified_scrapy.simplified_doc import SimplifiedDoc 

def print_html(html): # this is the function code
    return SimplifiedDoc(html).replaceReg(SimplifiedDoc(html).html,"</div>","\n").replaceReg(html,"<.*>","")

# let's say the html is 
html = """
<div> Hello, World! </div>
<div> By Faran </div>
"""

print_html(html) 

结果将是

Hello, World!
By Faran
于 2019-12-28T11:45:37.223 回答
0

那这个呢。

from simplified_scrapy.simplified_doc import SimplifiedDoc 
html = '''<div>aaa</div> <div>AAA</div>
<div><br></div>
<div>bbb</div> <div>BBB</div>
<div><br></div>
<div>ccc</div> <div>CCC</div>'''
doc = SimplifiedDoc(html)
html = doc.replaceReg(doc.html,"</div>","\n")
html = doc.replaceReg(html,"<.*>","")
print(html)

结果:</p>

aaa
AAA

bbb
BBB

ccc
CCC
于 2019-12-28T10:40:20.813 回答