【问题标题】:Converting HTML to plain text that looks like it was copied from a browser using Python将 HTML 转换为看起来像是使用 Python 从浏览器复制的纯文本
【发布时间】:2020-04-17 23:07:27
【问题描述】:

我想在 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),但无法得到正确的结果。

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

【问题讨论】:

  • 你想要的正确结果究竟是什么?
  • HTML 是结构,CSS 是表现形式。
  • @Adamantoisetortoise 我希望结果和浏览器中显示的一样,就像从浏览器复制到文本编辑器一样。

标签: python html beautifulsoup html-to-text


【解决方案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

【讨论】:

    【解决方案2】:

    这个呢。

    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)
    

    结果:

    aaa
    AAA
    
    bbb
    BBB
    
    ccc
    CCC
    

    【讨论】:

    • 感谢您的回答。好吧,我想要一个通用的解决方案,问题中的示例只是一个演示。
    • 对不起,我也没有通用的解决方案。处理标签特性和 CSS 样式表并不容易。等着看别人怎么说
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 2017-03-20
    • 1970-01-01
    • 2011-01-25
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多