【问题标题】:How to extract text from html and add spaces where needed?用 lxml 清理 html 但添加空格
【发布时间】:2016-06-03 13:04:00
【问题描述】:

我正在使用这个答案来清理 HTML 文件。

Remove all javascript tags and style tags from html with python and the lxml module

它在删除所有 html、脚本和样式标签方面做得很好,但是如果文本中没有空格,则清理器不会添加空格。这对于没有空格的菜单之类的东西来说是个问题,所以它会作为一个单词出现,因为它们都一起运行。

关于如何防止这种情况,添加空格或其他任何想法?谢谢

【问题讨论】:

标签: python html


【解决方案1】:

比较简洁的方法是

import lxml.html
from lxml import etree

html = "<div>Test</div><div>Test 2</div>"
document = lxml.html.document_fromstring(html)
text = " ".join(etree.XPath("//text()")(document))

(另见https://stackoverflow.com/a/23929354/4240413

【讨论】:

    【解决方案2】:

    如果你想解决同样的问题,但使用bs4 并删除lxml

    from bs4 import BeautifulSoup
    
    html = "<div>Test</div><div>Test 2</div>"
    soup = BeautifulSoup(html)
    text = soup.getText(separator=u' ')
    

    【讨论】:

      【解决方案3】:

      这可能会或可能不会帮助将来的任何人,但这对我有用。

      from lxml import html as HTML
      from lxml.html.clean import clean_html
      from lxml.html.clean import Cleaner
      import re
      
      html = "<div>Test</div><div>Test 2</div>"
      spaced_html = re.sub("</", " </", html)
      doc = HTML.document_fromstring(spaced_html)
      cleaner = Cleaner()
      cleaner.javascript = True 
      cleaner.style = True
      doc = cleaner.clean_html(doc)
      text = doc.text_content()
      text = re.sub(' +',' ',text)
      

      唯一的问题是它会删除任何多余的空格。如果你需要这些,你需要一个不同的解决方案,但我没有,所以它可以完美地工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-22
        • 2011-02-26
        • 1970-01-01
        • 1970-01-01
        • 2011-02-26
        • 2011-11-20
        • 2015-01-09
        • 1970-01-01
        相关资源
        最近更新 更多