众所周知,在设计爬虫时,最麻烦的一步就是对网页元素进行分析,目前流行的网页元素获取的工具有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用法汇总相关推荐

  1. python爬虫哪个选择器好用_Python网络爬虫四大选择器用法原理总结

    前几天小编连续写了四篇关于Python选择器的文章,分别用正则表达式.BeautifulSoup.Xpath.CSS选择器分别抓取京东网的商品信息.今天小编来给大家总结一下这四个选择器,让大家更加深刻 ...

  2. Python 网络爬虫的常用库汇总

    爬虫的编程语言有不少,但 Python 绝对是其中的主流之一.下面就为大家介绍下 Python 在编写网络爬虫常常用到的一些库. 请求库:实现 HTTP 请求操作 **urllib:**一系列用于操作 ...

  3. 网络爬虫(二)——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. ...

  4. 网络爬虫学习网络资源链接汇总

    下面是笔者学习网络爬虫感觉错的网络资源链接: [虫师] 这个是博客园的虫师作者的共享资料,这人很厉害. [CSDN]这是个神奇的网站,好多零碎知识点都这里面都有,百度前几的总会有他. [http Co ...

  5. C# 网络爬虫+HtmlAgilityPack+Xpath+爬虫工具类的封装的使用

    目录 1 工具准备 2 思路准备 3 附加知识准备--XPath 简述 看看例子 用XPath来寻找标签 获取所有同名的标签 获取指定标签 一个实例 最后的补充 4 代码实现 5 爬虫工具类的封装 6 ...

  6. Python之网络爬虫(Xpath语法、Scrapy框架的认识)

    文章目录 一.Xpath语法 二.Scrapy框架的认识 一.Xpath语法 xpath是一门在XML文档中查找信息的语言 1. 节点(Node) ​ 元素.属性.文本.命名空间.文档(根)节点 2. ...

  7. 网络爬虫--11.XPath和lxml

    文章目录 一. XML 1. XML 和 HTML 的区别 2. XML文档示例 3. HTML DOM 模型示例 4. XML的节点关系 二. 什么是XPath? 1. 选取节点 2. 谓语(Pre ...

  8. Python网络爬虫之Xpath详解

    1.什么是Xpath XPath 是一门在 XML 文档中查找信息的语言. 所谓 Xpath,是指 XML path language,path 就是路径, Xpath 主要是通过路径来查找元素. 咱 ...

  9. python网络爬虫学习的汇总

    抓包软件fiddler链接 文章安装链接:linux环境下Python3下的安装和配置(CentOS7系统) 由于现在再写以前python学习中的基础知识汇总 看不懂本篇的可以去看正在写的python ...

  10. python xpath语法-Python爬虫之XPath语法和lxml库的用法

    本来打算写的标题是XPath语法,但是想了一下Python中的解析库lxml,使用的是Xpath语法,同样也是效率比较高的解析方法,所以就写成了XPath语法和lxml库的用法 安装 为什么要用这个库 ...

最新文章

  1. linux下字符串处理工具二:awk( 二),awk脚本
  2. 【效率工具】Linux服务器终端MobaXterm
  3. Linux用cron发送信息,Python在linux上用cron作业发送KDE knotify消息?
  4. 趣味编程:C#中Specification模式的实现(参考答案 - 下)
  5. SAP Spartacus cxPageTemplateStyle Directive的作用
  6. ASP.net2.0调试JavaScript脚本
  7. Q88:全局光照(Global Illumination)——Path Tracing算法生成反射焦散效果的图形
  8. zmap扫描mysql_网站安全扫描工具 zmap怎么进行全网检测 - 驱动管家
  9. 终点与起点——诺基亚 N9 初步上手
  10. js JSON转Excel并导出
  11. 计算机系统中引入多道程序设计的目的在于,引入多道程序的目的在于什么
  12. oCPC和CPC之间的区别
  13. 全球与中国自行车驱动系统市场战略模式及投资方向建议报告2021年版
  14. poi2009 切题记
  15. 分布式全局唯一ID生成算法(改进的雪花算法——解决时钟回拨问题)
  16. Mybatis丶Mybatis-Plus
  17. 楚列斯基分解法、求矩阵范数的C++实现
  18. 5.1 上网本安装安卓x86_电脑装安卓系统,安卓 X86 版 5.1 RC1 下载
  19. 盗版软件繁荣了IT业 害死了软件业
  20. REDIS 客户端封装 SPARROW 框架源码

热门文章

  1. 把我的漫画浏览器后台程序迁移到GAE上了
  2. 魔方机器人之下位机编程-----两种串口通信方式的比较
  3. Python读取系统文件夹内所有文件并统计数量
  4. 神经网络工具箱——nn.funtional、初始化策略
  5. [编程题] 被3整除
  6. ENVI学习总结(十四)——高光谱地物识别
  7. 利用ArcGIS Pro对疫情数据进行分析并可视化
  8. 利用ENVI自带全球DEM数据计算区域平距高程
  9. 和opengl的关系_从零开始的图形学学习(零):一切的开始 —— 自建OpenGL开发框架...
  10. 树以及树简单的遍历方法