elM*_*ero 9 python xml xpath scrapy default-namespace
我是新手,我正在玩scrapy shell尝试抓取这个网站:www.spiegel.de/sitemap.xml
我做到了
scrapy shell "http://www.spiegel.de/sitemap.xml"
Run Code Online (Sandbox Code Playgroud)
当我使用时,它工作得很好
response.body
Run Code Online (Sandbox Code Playgroud)
我可以看到整个页面包括xml标签
但是例如:
response.xpath('//loc')
Run Code Online (Sandbox Code Playgroud)
根本不会工作.
我得到的结果是一个空数组
而
response.selector.re('somevalidregexpexpression')
Run Code Online (Sandbox Code Playgroud)
会工作
任何想法可能是什么原因?可能与编码有关吗?该网站不是utf-8
我在Win 7上使用python 2.7.我在另一个站点(dmoz)上尝试了xpath(),它工作正常.
har*_*r07 18
问题是由于在XML的根元素处声明的默认名称空间:
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
Run Code Online (Sandbox Code Playgroud)
因此,在该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')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2257 次 |
最近记录: |