python爬虫——使用XPath选择HTML元素

一、什么是XPath

XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。

  • XPath 使用路径表达式在 XML 文档中进行导航
  • XPath 包含一个标准函数库
  • XPath 是 XSLT 中的主要元素
  • XPath 是一个 W3C 标准

二、怎样学习XPath

个人推荐的学习基础教程网址为:http://www.w3school.com.cn/xpath/index.asp

上面有关XPath的教程非常详细,本篇文章主要介绍XPath在Python爬虫中的基本应用。

三、使用​​XPath选择HTML元素

(1).在浏览器中使用XPath,以Google Chrome浏览器为例。

1.打开谷歌浏览器,输入网址:http://example.com/,右击网页空白处,选择“检查”(快捷键F12),并选中Console。

     

2.在Console中输入"$x('//h1')",它会把浏览器移动到<h1>元素上,返回的是一个包含选定元素的数组。现在(2019年7月25日)我用的浏览器,需要把鼠标放到红线处的"h1"处,才会显示高亮。

(2)有用的XPath表达式

文档的层次结构始于<html>元素,可以使用斜线和文档名来选择文档中的元素。下面几种表达式是从http://example.com页面返回的结果。

需要注意的是,因为在这个特定页面中,下包含两个素,因此html/body/div/p会返回两个元素。可以使用p[1]p[2]分 别访问第一个和第二个元素。

也通过以下表达式访问head部分中的title元素。

对于页面比较复杂的大型文档,可能需要编写一个非常大的XPath表达式来访问指定元素。为了避免这一问题,可以使用//语法,它可以让你取得某一特定类型的元素,而无需考虑其所在的层次结构。比如,//p将会选择所有的p元素,而//a则会选择所有的链接。

  • 使用符号@来访问元素的属性
  • 使用text()函数,只选取文本
  • 使用*符号来选择指定层级的所有元素

其他的一些高级谓词选取元素,如contains(),starts-with(),not()这样的文档。(即使不使用也可以走的更远,因为还有更简洁高效的方法)

 

(3)使用Chrome获取XPath表达式
          Chrome通过向我们提供一些基本的XPath表达式,从而对开发者更加友好。方法为:在页面上选中想要的元素,右击选择检查,Chrome会自动进入开发者工具,并在树表示法中高亮选择元素。再次右击,选中“Copy”,点击“Copy  XPath”即可。

(4)灵活运用

由于购买书籍时与实际的操作环境有误差(时间上和物理上),运行书中的实例时可能得不到想要的结果,或者结果不一样。不要气馁,自己摸索,路都是一步一步走出来的。

在爬虫时经常会指向我们无法控制的服务器页面,这就意味着如果HTML以某种方式发生变化后,就会使XPath表达式失效,我们不得不回到爬虫中进行修正。一些简单的规则可以帮助我们减少表达式失效的可能性。

  • 避免使用数组索引(数值)
  • 谨慎使用类
  • 有意义的面向数据的类要比具体的或者面向布局的类更好


    参考书籍:《精通Python爬虫框架Scrapy》

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值