您的位置:首页 > 其它

scrapy-response.xpath中无法获取标签内容的问题

2017-02-12 19:23 351 查看
春天到了,又是交配、咳咳找工作的季节,各种招聘网站也开始活跃起来,为了服务身边的程序员朋友,于是用scrapy写了一个简单的招聘网站的爬取程序,用来自动获取更新招聘信息。

scrapy使用熟练了,用起来还是挺简单,利索的创建项目,编写spider文件,大体框架搭好,打开拉勾(https://www.lagou.com/zhaopin/python/),然后分析网页结构,使用 chrome浏览器的xpath插件获取标签数据,都没有问题。

按照自己的习惯,虽然在浏览器上获取数据没有问题,自己还是会用scrapy shell 再测试一次,确认没有问题才会往下编码。

然后问题就来了,使用xpath在浏览器中获取数据没有问题,在scrapy shell中运行response.body能获取整个页面的html代码

但是使用response.xpath("//div[@class='s_position_list']/ul/li/@data-positionid")在 shell 中运行的时候,获取的却为空

然后自己又试了两次,还是不行,于是开始google相关文档和问题,按照网上的提示,把xpath的语法修改了下,然后就可以获取数据了

response.xpath("//div[@id='s_position_list']/ul[@class='item_con_list']/li/@data-positionid")

或者这样也是可以的:

response.xpath("//div[@id='s_position_list']/ul/li/@data-positionid")

自己在找原因的时候,在 stackoverflow 上看见有其他原因的会导致 xpath 获取不到标签数据,链接如下:

http://stackoverflow.com/questions/36229985/scrapy-response-xpath-returns-empty-array-on-xml-document-with-default-namespace

最后总结一下这个问题可能的原因:

1:xpath 的语法问题:在 chrome中能获取数据不代表在 shell 中也一定能够获取数据,所以遇到这个问题可以尝试改写语法

2:XML根元素处声明的默认命名空间问题,具体可见上面的 stackoverflow 链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐