我是一个新手,我在玩scrapy shell,试图爬过这个网站:www.spiegel.de/sitemap.xml
我是和你一起做的
刮壳”http://www.spiegel.de/sitemap.xml"
当我使用
response.body
我可以看到整个页面,包括xml标记
然而,例如:
response.xpath(“//loc”)
这根本行不通
我得到的结果是一个空数组
当
response.selector.re('somevalidregexpression')
行得通
知道原因是什么吗?可能与编码有关吗?该站点不是utf-8
我正在Win7上使用python 2.7。我在另一个站点(dmoz)上尝试了xpath(),效果很好
该问题是由于在XML的根元素处声明的默认命名空间造成的:
xmlns=”http://www.sitemaps.org/schemas/sitemap/0.9"
因此,在该XML中,根元素及其不带前缀的子元素隐式地继承相同的名称空间
另一方面,在XPath中,您需要使用绑定到名称空间URI的前缀来引用该名称空间中的元素,没有这样的默认名称空间
您可以使用选择器。register_namespace()将命名空间前缀绑定到默认命名空间URI,然后在XPath中使用前缀:
response.selector.register\u名称空间('d','http://www.sitemaps.org/schemas/sitemap/0.9')
xpath(“//d:loc”)