网络爬虫之Xpath用法汇总
众所周知,在设计爬虫时,最麻烦的一步就是对网页元素进行分析,目前流行的网页元素获取的工具有BeautifulSoup,lxml等,而据我使用的体验而言,Scrapy的元素选择器Xpath(结合正则表达式)是其中较为出色的一种,功能相对较全、使用较为方便,正因为它的丰富性,有时很多功能会忘记,所以在这里整理好记录下来,方便今后查阅使用。
1. 元素的多级定位与跳级定位
- 多级定位:依靠html中的多级元素逐步缩小范围
response.xpath('//table/tbody/tr/td')//如果知道元素所属的下标可以用下标选择 response.xpath('//table/tbody/tr[1]/td')
跳级定位:符号“//”表示跳级定位,即对当前元素的所有层数的子元素(不仅是第一层子元素)进行查找,一般xpath的开头都是跳级定位
response.xpath('//span//table')
2. 依靠元素的属性定位
每个html元素都有很多属性,如id、class、title、href、text(href和text往往可以配合正则表达式)等,这些属性往往具有很强的特殊性,结合元素多级定位或跳级定位会更准确高效,下面举几个典型的例子,其他的举一反三
利用class定位
response.xpath('//td[@class="mc_content"]')
利用href配合正则表达式定位
response.xpath('//a[re:test(@href,"^\/index\.php\?m=News&a=details&id=1&NewsId=\d{1,4}")]')
利用text结合正则表达式定位
a=response.xpath('//a[re:test(text(),"\w{4}")]')
此外,xpath还有对于html元素操作的两个实用的函数(可以用正则表达式代替)——starts-with和contains;
a=response.xpath('//a[starts-with(@title,"注册时间")]')a=response.xpath('//a[contains(text(),"闻")]')
3. 提取元素或元素的属性值
首先是最基本的extract()函数,提取被定为的元素对象
a=response.xpath('//a[contains(text(),"闻")]').extract()//如果被定为的元素对象有多个,可以有用下标指定 a=response.xpath('//a[contains(text(),"闻")]').extract()[1]
提取元素的属性
//提取text a=response.xpath('//a[contains(text(),"闻")]/text()').extract()//获取href a=response.xpath('//a[contains(text(),"闻")]/@href').extract()//获取name a=response.xpath('//a[contains(text(),"闻")]/@name').extract()
此时我们的正则表达式又闲不住了(scrapy自带的函数),可以对提取的元素进行选择
//对href中的部分字符串进行选择 response.xpath('//a[@name="_l_p_n"]/@href').re('\/s.*?list\.htm')
在这里关于xpath的所有用法基本总结完毕,只是由于xpath是对静态元素进行匹配选择,对于javascript往往束手无策,这时不得不用一个自动化测试工具——selenium,可以实现各种动态事件和静态元素的选择,只是selenium往往比较吃内存,响应时间也比较慢,对于大型的爬虫任务尽量不要使用,毕竟有一些javascript元素是内嵌在网页代码中的,这时候结合万能的正则表达式,xpath往往能够实现。如下:
link = re.search("javascript:goToPage\('(.*?)'", value) //value为包含该段的字符串
转载于:https://www.cnblogs.com/pyspark/p/8817695.html
网络爬虫之Xpath用法汇总相关推荐
- python爬虫哪个选择器好用_Python网络爬虫四大选择器用法原理总结
前几天小编连续写了四篇关于Python选择器的文章,分别用正则表达式.BeautifulSoup.Xpath.CSS选择器分别抓取京东网的商品信息.今天小编来给大家总结一下这四个选择器,让大家更加深刻 ...
- Python 网络爬虫的常用库汇总
爬虫的编程语言有不少,但 Python 绝对是其中的主流之一.下面就为大家介绍下 Python 在编写网络爬虫常常用到的一些库. 请求库:实现 HTTP 请求操作 **urllib:**一系列用于操作 ...
- 网络爬虫(二)——Xpath和Selenium的使用
文章目录 2 网络爬虫进阶 2.1 Xpath 2.1.1 Xpath解析原理 2.1.2 信息提取 2.1.2.1 获取所有结点 2.1.2.2 获取子节点 2.1.2.3 获取父节点 2.1.2. ...
- 网络爬虫学习网络资源链接汇总
下面是笔者学习网络爬虫感觉错的网络资源链接: [虫师] 这个是博客园的虫师作者的共享资料,这人很厉害. [CSDN]这是个神奇的网站,好多零碎知识点都这里面都有,百度前几的总会有他. [http Co ...
- C# 网络爬虫+HtmlAgilityPack+Xpath+爬虫工具类的封装的使用
目录 1 工具准备 2 思路准备 3 附加知识准备--XPath 简述 看看例子 用XPath来寻找标签 获取所有同名的标签 获取指定标签 一个实例 最后的补充 4 代码实现 5 爬虫工具类的封装 6 ...
- Python之网络爬虫(Xpath语法、Scrapy框架的认识)
文章目录 一.Xpath语法 二.Scrapy框架的认识 一.Xpath语法 xpath是一门在XML文档中查找信息的语言 1. 节点(Node) 元素.属性.文本.命名空间.文档(根)节点 2. ...
- 网络爬虫--11.XPath和lxml
文章目录 一. XML 1. XML 和 HTML 的区别 2. XML文档示例 3. HTML DOM 模型示例 4. XML的节点关系 二. 什么是XPath? 1. 选取节点 2. 谓语(Pre ...
- Python网络爬虫之Xpath详解
1.什么是Xpath XPath 是一门在 XML 文档中查找信息的语言. 所谓 Xpath,是指 XML path language,path 就是路径, Xpath 主要是通过路径来查找元素. 咱 ...
- python网络爬虫学习的汇总
抓包软件fiddler链接 文章安装链接:linux环境下Python3下的安装和配置(CentOS7系统) 由于现在再写以前python学习中的基础知识汇总 看不懂本篇的可以去看正在写的python ...
- python xpath语法-Python爬虫之XPath语法和lxml库的用法
本来打算写的标题是XPath语法,但是想了一下Python中的解析库lxml,使用的是Xpath语法,同样也是效率比较高的解析方法,所以就写成了XPath语法和lxml库的用法 安装 为什么要用这个库 ...
最新文章
- linux下字符串处理工具二:awk( 二),awk脚本
- 【效率工具】Linux服务器终端MobaXterm
- Linux用cron发送信息,Python在linux上用cron作业发送KDE knotify消息?
- 趣味编程:C#中Specification模式的实现(参考答案 - 下)
- SAP Spartacus cxPageTemplateStyle Directive的作用
- ASP.net2.0调试JavaScript脚本
- Q88:全局光照(Global Illumination)——Path Tracing算法生成反射焦散效果的图形
- zmap扫描mysql_网站安全扫描工具 zmap怎么进行全网检测 - 驱动管家
- 终点与起点——诺基亚 N9 初步上手
- js JSON转Excel并导出
- 计算机系统中引入多道程序设计的目的在于,引入多道程序的目的在于什么
- oCPC和CPC之间的区别
- 全球与中国自行车驱动系统市场战略模式及投资方向建议报告2021年版
- poi2009 切题记
- 分布式全局唯一ID生成算法(改进的雪花算法——解决时钟回拨问题)
- Mybatis丶Mybatis-Plus
- 楚列斯基分解法、求矩阵范数的C++实现
- 5.1 上网本安装安卓x86_电脑装安卓系统,安卓 X86 版 5.1 RC1 下载
- 盗版软件繁荣了IT业 害死了软件业
- REDIS 客户端封装 SPARROW 框架源码