欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据解析——xpath解析

程序员文章站 2022-07-01 19:26:34
...

前言:xpath解析在爬虫中是较为常用的一个数据解析方式,以及在scrapy框架学习中也会再次用到,所以多少还是要会的

1.xpath解析原理

1.1. 实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中

1.2 2. 调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获

2. 环境安装

  • pip install lxml

3. 进行实例化

    - 将获取的html实例化
        - selector = etree.HTML(html)
        - 进行筛选 返回的式一个元素对象
        - value = selector.xpath(语法)
    - xpath('xpath表达式')

4. xpath 表达式

4.1 ‘/’ 用法

  • / : 表示从根节点开始定位 (一个html的最外面就是一个根节点) 注意:一个 / 表示的是一个层级,
    //: 表示可跨层级使用,也可以从任意位置开始

=============================================================================================

数据解析——xpath解析

比如定位到一个上图中 title 的三种方法

from lxml import etree
    title1 = selector.xpath('/html/head/title')
    title2 = selector.xpath('/html//title')  # 可跨越层级,即表示可以可跨多个标签
    title3 = selector.xpath('//title')
    print(title1)
    print(title2)
    print(title3)

数据解析——xpath解析

这三种的输出结果都是一样的,你细品!!!

4.2 属性定位

使用属性定位时要用@
数据解析——xpath解析

直接定位到div标签下class=test那的写法:

r = selector.xpath('//div[@class="test"]')

4.3 索引定位

数据解析——xpath解析

在该标签下若要获取箭头所指该怎么办?
这就需要索引定位了
注意这里的索引是从1开始的

 r = selector.xpath('//div[@class="test"]/ul/li[2]')

4.4 定位后的取操作

===============================================

4.4.1 取文本

  • /text() 获取的是标签中直系的内容
  • //text() 获取的是非直系的文本内容(即该标签下的所有的文本内容)

数据解析——xpath解析
比如还是刚刚那个就取他的文本

r = selector.xpath('//div[@class="test"]/ul/li[2]/a/text()')
print(r)

数据解析——xpath解析

===============================================

4.4.2 取属性

- /@attrName 即标签内一个属性名的内容
使用属性取值时要固定使用@

数据解析——xpath解析
比如获得上图中的url的使用方法为

r = selector.xpath('//div[@class="dance"]/img/@src')
print(r)

数据解析——xpath解析

相关标签: 数据解析