Scrapy中诡异xpath的匹配内容失效问题及解决
引言
在爬虫的世界里,xpath是一种非常简单易用的匹配规则,方便我们在web世界里提取需要的各类信息。
本文将讲述一个xpath规则无效的问题分析过程。
环境介绍
Python 3.6.1 Scrapy 1.5.0
问题
在选用xpath之时,都是基于firefox或者chrome中自带的Web开发工具来选取的。
这里一般推荐使用chrome的devtool,功能强大,简单易用,童叟无欺,居家旅游必须良品呀。
具体示意如下:
基于xpath提取信息
基于xpath提取的路径信息,示例如下:
//*[@id=”SpanPlanSchoolInfo”]/table[2]/tbody/tr[3]/td/table/tbody/tr[2]/td[1]/a
在Scrapy代码中使用如下:
def parse(self, response): xpath_url = '//*[@id="SpanPlanSchoolInfo"]/table[2]/tbody/tr[3]/td/table/tbody/tr[2]/td[1]/a' urls = response.xpath(xpath_url) .....
但是在实际执行中,却一直没有匹配到urls,根据实际上页面返回正常,同时数据也是正确可以匹配到的,那问题出现在哪里呢?
问题分析
根据结果来分析,如果页面存在,但是没有正确的结果输出,则一定是xpath的问题,但是xpath问题是基于chrome自带的devtools工具copy而来的,怎么可能出错恩?真是让人想不透的问题…….
在经过一番深入的反复尝试之后,主要是基于scrapy提供的强大的scrapy shell交互工具,可以帮助开发者快速地一步一步地定位问题。
于是采取了逐步缩小xpath的方式,逐步定位问题,终于找到了问题的原因所在,那就是tbody是一个需要移除的tag标签。
将正确的xpath设置为:
//*[@id=”SpanPlanSchoolInfo”]/table[2]/tr[3]/td/table/tbody/tr[2]/td[1]/a
问题总结
虽然问题解决了,但是原因是什么呢?
经过分析,主要是由于浏览器本身自动为table新增了tbody标签内容,但是在xpath中是不需要的,需要在进行xpath查询之时移除掉。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持猪先飞。
原文出处:https://blade.blog.csdn.net/article/details/80215753
相关文章
- 有一个项目要获取页面中所有img标签中的图片地址,这里我们使用到了preg_match_all正则函数,然后看我下面的一些参数即可实现了。 例 代码如下 复制代码 ...2016-11-25
- 这篇文章主要给大家介绍了一个关于JS正则匹配的踩坑记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-13
- 复制代码 代码如下:$nodes = @$xpath->query("//*[@id='main_pr']/img/@src");$prurl = $nodes->item(0)->nodeValue;...2013-10-04
- 关于匹配字符串问题,有很多种类型,今天讨论 js 代码里的字符串匹配,因为我想学完之后写个语法高亮练手,所以用js代码当作例子...2021-05-07
- 昨天在《js 正则学习小记之匹配字符串字面量》谈到 /"(?:\\.|[^"])*"/ 是个不错的表达式,因为可以满足我们的要求,所以这个表达式可用,但不一定是最好的...2021-05-07
- 这篇文章主要介绍了解决Pytorch修改预训练模型时遇到key不匹配的情况,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-06-05
- 在 OpenResty 中,同时存在两套正则表达式规范:Lua 语言的规范和 Nginx 的规范,下面这篇文章主要给大家介绍了关于OpenResty中正则模式匹配的2种方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。...2020-06-30
- 这篇文章主要介绍了python基于OpenCV模板匹配识别图片中的数字,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下...2021-03-31
- XPath构建于XML之上,以表示路径的方式来确定XML中元素位置,事实上并不是太常用,这里我们来简单了解JavaScript操作XPath的一些基本方法...2016-06-12
- 本文章通过实例代码给大家详细介绍js中正则表达式的全局匹配模式 g的用法,需要的朋友参考下...2017-04-03
- C#里面的String.Replace(string,string)方法替换的时候是替换所有的匹配项,我们需要只替换第一个匹配项,写一个方法来实现这个功能...2020-06-25
基于xpath选择器、PyQuery、正则表达式的格式清理工具详解
这篇文章主要介绍了基于xpath选择器、PyQuery、正则表达式的格式清理工具,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-07- 这篇文章主要介绍了Swagger2匹配多个controller代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-19
- 这篇文章主要介绍了FastJSON字段智能匹配踩坑的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-06-18
- 这篇文章主要介绍了Python通过fnmatch模块实现文件名匹配,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-01
- 本文给大家分享C#中如何使用正式表达式获取匹配所需数据 ,非常实用,对正则表达式获取匹配相关知识感兴趣的朋友一起学习吧...2020-06-25
VS2012 未找到与约束ContractName匹配的导出 <font color=red>原创</font>
这篇文章主要介绍了在更新的windows补丁后,Visual Studio 用户可能无法打开或创建 C++ 或 JavaScript 文件或项目,小编的解决办法,希望可以帮助到大家...2020-06-25- 这篇文章主要介绍了ORACLE数据库对long类型字段进行模糊匹配的解决思路,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-03
- php教程 正则匹配unicode 编码正则方法,因为unicode编码的特殊性,所以一般的中文或英文正则是不能正确取到我们想要的内容的,下面来看一款专业的unicode正则表达式吧。...2016-11-25
- 这篇文章主要介绍了python正则表达式匹配IP代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-05-09