当前位置: > python爬虫 >

python解析库xpath的使用
栏目分类:python爬虫   发布日期:2019年03月09日 15:48:47   浏览次数:

 大家好,我是爱吃苹果的宇文拓,上一篇文章中我使用到了python爬虫解析库中的一种解析方式(xpath)今天我就个大家介绍一下关于这个解析的使用方法

1.初识xpath 
    xpath,全称为XML Path Language,即XML路径语言,它是一门在xml文档中查找信息的语言。最初用来搜寻xml文档,但是现在也用于html。
    xpath常用的规则如下,在运用xpath的时候这些都是必须掌握的,一定要熟记。

    pythoon解析库

2.准备工作
   在使用xpath前需要安装好lxml库,windos下安装的方法如下

   #python3 -m pip install lxml


如果你要测试是否安装成功,可以进入python命令,输入import lxml,如果没有报错说明安装成功,如果出现下图的提示,说明你没有安装成功
python爬虫

安装成功后,我们开始使用它。
python爬虫

如图我们首先 导入了lxml中的etree模块,这个模块可以将我们获取到的网页源代码,转换为HTML对象,如图只要调用etree.HTML()方法,并传入response对象的text属性即可(在这里即是res.text)。我们打印了 html变量,以及它的类型,结果如下





前面我们说过xpath可以解析html文档,我们现在通过etree库将服务器返回的响应的text属性转换为了html文档,所以我们就可以用xpth来解析它。接下来我们介绍xpath语法规则。



3.选择节点
  所有节点://,我们一般使用//来选取所有符合要求的节点,如 all_node = html.xapth(''.//*) 代表选取当前HTML下的所有节点。然后会存入一个列表的数据结构。

  子节点 : /,通过/可以找到当前节点下的子节点,通过//可以找到当前节点下的所有子孙节点。如 son_node = html.xpath('//li/a'),代表查找li节点
下的所有直接a子节点。 son_node = html.xpath('//li//a') 代表查找li节点下的所有子孙节点a。

  父亲节点:.. ,在xpath 中连续的两点代表父节点,如fath_node = html.xpath('//a[@class="test"]/..'),代表查找html下class属性为test的a标签的父节点。

  属性匹配:@ ,我们在xpath中使用这个符号来匹配属性,如attr = html.xpath('//li[@class="item"]') ,代表选择html下class属性为item的li标签。

  获取文本 : text,如text = html.xpath('//li[@class="item"]/text') ,代表提取class属性为item的li标签的text属性即文本信息。


4.属性获取与匹配
      前面我有提到@用于匹配属性,这里也是一样,只是写法上有点区别,如 result = html.xpath(''li/a/@href) 即获取li标签下的a标签的href属性
值,但是有些时候属性可能有多个值,这时候我们就需要用到高级函数contains函数了。如 results = html.xpath('//li[contains(@class,"text")]/a'),代
表获取class属性中包含text值的li标签下面的直接a子节点。


     如果我们有时候定位一个节点的时候通过一个属性无法准确定位,这时就要用多属性定位了。如下

      results = html.xpath('//li[contains(@class,"text")  and @name="text2"]/a') ,代表获取class属性包含text值的li并且name属性等于text2的li标签下的直接a节点。


     
 5.xpath运算符表

python解析库
 


       总结:今天我讲解了在爬虫中需要用到的解析库xpath,关于它的作用以及一些常用的语法,在后期的爬虫中我们肯定会运用到解析库。我个人而言,在众多解析库中我比较喜欢xpath,因为它语法简洁 ,功能强大是一个很好的选择。掌握我今天所提到的知识,会提高你以后爬取网页信息的效率。

相关热词:

相关内容
热门关键词
     
python教程 python爬虫 python人工智能 Python+大数据 python问答