簡體   English   中英

scrapy response.xpath使用默認命名空間返回xml文檔上的空數組,而response.re工作

[英]scrapy response.xpath returns empty array on xml document with default namespace, while response.re works

我是新手,我正在玩scrapy shell嘗試抓取這個網站: www.spiegel.de/sitemap.xml

我做到了

scrapy shell "http://www.spiegel.de/sitemap.xml"

當我使用時,它工作得很好

response.body 

我可以看到整個頁面包括xml標簽

但是例如:

response.xpath('//loc') 

根本不會工作。

我得到的結果是一個空數組

response.selector.re('somevalidregexpexpression') 

會工作

任何想法可能是什么原因? 可能與編碼有關嗎? 該網站不是utf-8

我在Win 7上使用python 2.7。我在另一個站點(dmoz)上嘗試了xpath(),它工作正常。

問題是由於在XML的根元素處聲明的默認名稱空間

xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"

因此,在該XML中,根元素及其沒有前綴的后代隱式地繼承了相同的名稱空間。

另一方面,在XPath中,您需要使用綁定到命名空間URI的前綴來引用該命名空間中的元素,並不存在隱含的此類默認命名空間

您可以使用selector.register_namespace()將名稱空間前綴綁定到默認名稱空間URI,然后在XPath中使用前綴:

response.selector.register_namespace('d', 'http://www.sitemaps.org/schemas/sitemap/0.9')
response.xpath('//d:loc')

您還可以將xpath與本地命名空間一起使用,例如:

response.xpath("//*[local-name()='loc']")

如果您正在解析來自多個異構源的響應並且您不想注冊每個命名空間,則此功能尤其有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM