[英]Parsing HTML tree in lxml : how can I retrieve the text inside the element?
我正在嘗試檢索元素內的正確文本。 這是輸出:
(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:"Open Sans", "Helvetica Neue", Arial, Helvetica, sans-serif;color:#888888;vertical-align:middle;margin:0;font-size:13px;font-weight:300 !important"> \n<i class="ic-icon-delivered" style="margin:0;padding:0;font-family:"Open Sans", "Helvetica Neue", "Helvetica", 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"/> \nYour order was delivered \non \n6/4 \n@ \n4:44 PM \n</h5> \n'
(Pdb) p els[0].text
'\r\n'
如何獲取字符串:“您的商品在6/4下午4:40交付”? 我可以在etree.tostring()輸出上使用正則表達式,但想知道為什么els [0] .text選項不起作用?
您可以嘗試使用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:"Open Sans", "Helvetica Neue", Arial, Helvetica, sans-serif;color:#888888;vertical-align:middle;margin:0;font-size:13px;font-weight:300 !important"> \n<i class="ic-icon-delivered" style="margin:0;padding:0;font-family:"Open Sans", "Helvetica Neue", "Helvetica", 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"/> \nYour order was delivered \non \n6/4 \n@ \n4:44 PM \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'
如果您想要所有文本,則可以簡單地使用:
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:"Open Sans", "Helvetica Neue", Arial, Helvetica, sans-serif;color:#888888;vertical-align:middle;margin:0;font-size:13px;font-weight:300 !important"> \n<i class="ic-icon-delivered" style="margin:0;padding:0;font-family:"Open Sans", "Helvetica Neue", "Helvetica", 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"/> \nYour order was delivered \non \n6/4 \n@ \n4:44 PM \n</h5>"""
tree = lxml.html.fromstring(html)
請注意,您可能希望避免使用lxml.html。 etree .fromstring,只需使用lxml.html.fromstring
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.