【问题标题】:Manipulating HTML-Code in Python3 [closed]在 Python3 中操作 HTML 代码 [关闭]
【发布时间】:2016-03-20 14:29:26
【问题描述】:

我正在尝试使用 Python3 操作 HTML 文件并删除具有特定 id-Tag 的 div

有没有比混合使用 for-Loops 和 regex 更优雅的方式来操作或删除这个容器?

我知道,有 HTMLParser 模块,但我不确定这是否对我有帮助(它会找到相应的标签,但如何删除这些和内容?)。

【问题讨论】:

    标签: python html regex python-3.x web


    【解决方案1】:

    尝试lxml 和 css/xpath 查询。

    例如,使用这个 html:

    <html>
      <body>
        <p>Some text in a p.</p>
        <div class="go-away">Some text in a div.</div>
        <div><p>Some text in a p in a div</p></div>
      </body>
    </html>
    

    您可以将其读入,删除带有“go-away”类的 div,然后输出结果:

    import lxml.html
    
    html = lxml.html.fromstring(html_txt)
    go_away = html.cssselect('.go-away')[0] # Or with suitable xpath
    go_away.getparent().remove(go_away)
    
    lxml.html.tostring(html) # Or lxml.html.tostring(html).decode("utf-8") to get a string
    

    【讨论】:

    • 谢谢,lxml 正是我想要的!
    【解决方案2】:

    虽然我不能强调这一点

    不要使用正则表达式解析 HTML!

    这是我使用正则表达式的方法。

    from re import sub
    new_html = sub('<div class=(\'go-away\'|"go-away")>.*?</div>', '', html)
    

    尽管我认为这应该没问题,但你永远不应该使用正则表达式来解析任何东西。它通常会产生奇怪的、难以调试的问题。它会为你创造比你开始时更多的工作。 不要使用正则表达式解析。

    【讨论】:

    • 是的,确实如此。不要这样做。 Or you may go mad.
    • 感谢分享您的经验!这就是我试图避免使用正则表达式的确切原因。这简直糟透了,因为无论您做什么,使用正则表达式都会更快地破坏。
    • 正则表达式有时不合适,但对于大量可预测的数据来说绝对是绝妙的。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    相关资源
    最近更新 更多