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 链接
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 链接
相关文章推荐
- 解决HtmlAgilityPack无法获取form标签子节点的问题
- SpringBind对象到页面时,用ajax提交form表单内容,后台无法获取绑定对象问题
- JS获取input标签的text值、JS获取下拉框内容、input控制只能输入数字等问题汇总
- Java在发送HTTP请求时,遇到身份验证无法获取到response内容的解决方法
- scrapy框架中利用xpath获取网页内容为空,而xpath书写完全正确
- scrapy xpath 从response中获取li,然后再获取li中img的src
- file_get_contents无法获取到https开头的链接内容问题
- Scrapy匹配xpath时tbody标签的问题
- scrapy xpath取包含某些特定文字的选择器,获取一个标签下的所有text(包括自身和子孙)
- [置顶]关于使用input type=file 标签上传文件的注意细节(上传文件 无法获取文件 问题)
- IOS URL无法对加号进行编码导致http请求时服务器端获取的内容中加号变成空格问题
- okhttp无法获取response.body().string()的问题解决
- 解决MultipartEntity无法获取内容数据问题:Multipart form entity does not implement #getContent()
- PHP CURL POST无法获取响应内容的问题
- 关于使用input type=file 标签上传文件的注意细节(上传文件 无法获取文件 问题)
- 解决httpwebrequest无法通过使用代理的局域网获取response的问题
- IOS URL无法对加号进行编码导致http请求时服务器端获取的内容中加号变成空格问题
- Q:前端canvas标签的内容传递到后台保存为图片时出现无法正常显示的问题
- HttpWebResponse无法准确获取CharacterSet导致网页数据乱码问题的解决
- 解决AJAX中使用UpdatePanel后再用Response.Write();等无法弹出对话框问题 3法