[英]Namespace argument in lxml parsing
我有一個要解析的HTML頁面。 這是我對lxml的處理方式:
node=etree.fromstring(html)
>>> node
<Element {http://www.w3.org/1999/xhtml}html at 0x110676a70>
>>> node.xpath('//body')
[]
>>> node.xpath('body')
[]
不幸的是,我所有的xpath調用現在都返回一個空列表。 為什么會發生這種情況,我將如何解決此呼叫?
您可以在此處添加名稱空間,如下所示:
>>> node.xpath('//xmlns:tr', namespaces={'xmlns':'http://www.w3.org/1999/xhtml'})
[<Element {http://www.w3.org/1999/xhtml}tr at 0x11067b6c8>, <Element {http://www.w3.org/1999/xhtml}tr at 0x11067b710>]
更好的方法是使用lxml's
html解析器:
>>> node=lxml.html.fromstring(html)
>>> node.findall('body')
[<Element body at 0x1106b8f18>]
查詢時需要使用名稱空間前綴。 喜歡
node.xpath('//html:body', namespaces={'html': 'http://...'})
或者您可以使用.nsmap
node.xpath('//html:body', namespaces=node.nsmap)
假設所有名稱空間均在node
指向的標記上定義。 對於大多數xml
文檔來說通常都是這樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.