数据解析——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的最外面就是一个根节点) 注意:一个 / 表示的是一个层级,
//: 表示可跨层级使用,也可以从任意位置开始
=============================================================================================
比如定位到一个上图中 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)
这三种的输出结果都是一样的,你细品!!!
4.2 属性定位
使用属性定位时要用@
直接定位到div标签下class=test那的写法:
r = selector.xpath('//div[@class="test"]')
4.3 索引定位
在该标签下若要获取箭头所指该怎么办?
这就需要索引定位了
注意这里的索引是从1开始的
r = selector.xpath('//div[@class="test"]/ul/li[2]')
4.4 定位后的取操作
===============================================
4.4.1 取文本
- /text() 获取的是标签中直系的内容
- //text() 获取的是非直系的文本内容(即该标签下的所有的文本内容)
比如还是刚刚那个就取他的文本
r = selector.xpath('//div[@class="test"]/ul/li[2]/a/text()')
print(r)
===============================================
4.4.2 取属性
- /@attrName 即标签内一个属性名的内容
使用属性取值时要固定使用@
比如获得上图中的url的使用方法为
r = selector.xpath('//div[@class="dance"]/img/@src')
print(r)
上一篇: UI线程与后台线程交互设计5种方法(转)
下一篇: Git简介以及简单使用