【问题标题】:Parsing HTML tree in lxml : how can I retrieve the text inside the element?在 lxml 中解析 HTML 树:如何检索元素内的文本?
【发布时间】:2015-06-09 08:02:03
【问题描述】:

我正在尝试检索元素内的正确文本。这是输出:

(Pdb) p etree.tostring(els[0])
'<h5 class="msg-delivered" style="padding:0;text-rendering:optimizeLegibility;line-height:1.1;margin-bottom:15px;-webkit-font-smoothing:antialiased;font-family:&quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, Arial, Helvetica, sans-serif;color:#888888;vertical-align:middle;margin:0;font-size:13px;font-weight:300 !important">&#13;\n<i class="ic-icon-delivered" style="margin:0;padding:0;font-family:&quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, Helvetica, Arial, sans-serif;text-rendering:optimizeLegibility;position:relative;background:url(https://d1s8987jlndkbs.cloudfront.net/assets/sprite-ratings-ee0696744f54df6536179c70e24217e3.png) no-repeat -12px -12px;background-size:132px 436px;display:none;vertical-align:middle;width:25px;height:25px;background-position:-16px -16px;top:0"/>&#13;\nYour order was delivered&#13;\non&#13;\n6/4&#13;\n@&#13;\n4:44 PM&#13;\n</h5>&#13;\n'
(Pdb) p els[0].text
'\r\n'

如何获取字符串:“您的商品已于 6 月 4 日下午 4:40 交付”?我可以在 etree.tostring() 输出上使用正则表达式,但想知道为什么 els[0].text 选项不起作用?

【问题讨论】:

    标签: python html-parsing lxml


    【解决方案1】:

    您可以尝试使用 xpath 函数 string() 返回当前元素内所有文本节点的连接值:

    import lxml.html
    html = """<h5 class="msg-delivered" style="padding:0;text-rendering:optimizeLegibility;line-height:1.1;margin-bottom:15px;-webkit-font-smoothing:antialiased;font-family:&quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, Arial, Helvetica, sans-serif;color:#888888;vertical-align:middle;margin:0;font-size:13px;font-weight:300 !important">&#13;\n<i class="ic-icon-delivered" style="margin:0;padding:0;font-family:&quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, Helvetica, Arial, sans-serif;text-rendering:optimizeLegibility;position:relative;background:url(https://d1s8987jlndkbs.cloudfront.net/assets/sprite-ratings-ee0696744f54df6536179c70e24217e3.png) no-repeat -12px -12px;background-size:132px 436px;display:none;vertical-align:middle;width:25px;height:25px;background-position:-16px -16px;top:0"/>&#13;\nYour order was delivered&#13;\non&#13;\n6/4&#13;\n@&#13;\n4:44 PM&#13;\n</h5>"""
    tree = lxml.html.etee.fromstring(html)
    print(tree.xpath("string()"))
    

    输出:

    '\r\n\r\nYour order was delivered\r\non\r\n6/4\r\n@\r\n4:44 PM\r\n'
    

    【讨论】:

      【解决方案2】:

      如果你想要所有的文字,你可以简单地使用:

      els[0].text_content()
      

      也就是说,假设您使用以下内容加载了 html:

      import lxml.html
      html = """<h5 class="msg-delivered" style="padding:0;text-rendering:optimizeLegibility;line-height:1.1;margin-bottom:15px;-webkit-font-smoothing:antialiased;font-family:&quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, Arial, Helvetica, sans-serif;color:#888888;vertical-align:middle;margin:0;font-size:13px;font-weight:300 !important">&#13;\n<i class="ic-icon-delivered" style="margin:0;padding:0;font-family:&quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, Helvetica, Arial, sans-serif;text-rendering:optimizeLegibility;position:relative;background:url(https://d1s8987jlndkbs.cloudfront.net/assets/sprite-ratings-ee0696744f54df6536179c70e24217e3.png) no-repeat -12px -12px;background-size:132px 436px;display:none;vertical-align:middle;width:25px;height:25px;background-position:-16px -16px;top:0"/>&#13;\nYour order was delivered&#13;\non&#13;\n6/4&#13;\n@&#13;\n4:44 PM&#13;\n</h5>"""
      tree = lxml.html.fromstring(html)
      

      请注意,您可能希望避免使用 lxml.html.etree.fromstring,而只需使用 lxml.html.fromstring

      【讨论】:

        猜你喜欢
        • 2016-02-20
        • 1970-01-01
        • 2016-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多