一、json数据
导入语法:import json
- json的作用(让不同编程语言之间可以进行有效的数据交流(几乎所有的高级语言都支持json数据格式))
- 什么是json数据(一个有效的ijson有且只有一个数据,并且唯一的这个数据必须是json支持的类型的数据。)
1 2 3 4 5 6 7 8 9
| """ json支持的数据类型: 数字 - 直接写,例如:100、+23、-45、12.5、3e4 字符串 - 加双引号,只有双引号,例如:"字符串1"、"字符串2"、"换行符"等 布尔 - 只有true和false两个值 空值 - null 数组(列表) - 相当于Python的列表: [元素1, 元素2, 元素3,...] 字典 - 键必须是字符串: {键1:值1, 键2:值2,...} """
|
json数据的解析
1) 如果通过requests发送请求得到的数据就是json数据,可以直接用响应.json()将json数据转换成Python数据
2)非json接口提供的json数据的解析
1 2 3 4 5 6 7 8
| """ 系统模块:json -> 提供将json数据转换成Python数据,以及将Python数据转换成json数据两个功能 json.loads(json格式的字符串) - 将json转Python,返回值的类型会因为字符串的内容不同而不一样 json.dumps(python数据) - 将Python数据转换json格式的字符串,返回值是字符串
说明:json格式的字符串 - 字符串的内容是json格式的数据,例如:'100'、'"abc"'、'{"a": 100}' int、float、str、bool、list、dict、None、tuple - 可以转成json数据 """
|
二、xpath数据解析
导入语法:from lxml import etree
lxml: 可以通过xpath的方法来解析html数据和xml数据
- 创建树结构,获取根节点
#etree.HTML(html代码) - 将html页面创建成一个树结构,并且返回树的根节点
1
| html_node = etree.HTML(open('files/网页.html').read())
|
- 根据路径获取指定标签
#节点对象.xpath(路径) - 返回值是列表,列表中的元素就根据路径找到的所有的结果
1)绝对路径 - /从根节点开始写全路径 # 注意:绝对的写法和查找方式跟前面谁去.xpath没有关系
1 2
| h1_node = html_node.xpath('/html/body/div/h1')[0] print(h1_node)
|
2)相对路径: ./路径、../路径 注意: 用.表示当前节点 (谁去.xpath,当前节点就是谁)
1 2
| result = html_node.xpath('./body/div/p') print(result)
|
3)全局搜索: //; //路径
1 2
| result = html_node.xpath('//img') print(result)
|
- 获取标签内容和标签属性
1)标签内容:获取标签的路径/text()
1 2
| result = html_node.xpath('//p/text()') print(result)
|
2)属性值:获取标签的路径/@属性名
1 2
| result = html_node.xpath('//img/@src') print(result)
|
谓语
1)[N] - 获取第N个(同级中取第N个)
1 2
| result = html_node.xpath('//p[1]/text()') print(result)
|
2) [last()] - 取最后一个(同级最后一个)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| result = html_node.xpath('//ul/li[last()]/p/text()') print(result)
result = html_node.xpath('//ul/li[last()-1]/p/text()') print(result result = html_node.xpath('//ul/li[last()-2]/p/text()') print(result
result = html_node.xpath('//ul/li[position()<=2]/p/text()') print(result)
result = html_node.xpath('//ul/li[position()>1]/p/text()') print(result)
|
3)属性相关谓语
[@属性名=值] - 获取指定属性为指定值的标签
1 2
| result = html_node.xpath('./body/div[1]/p[@class="c1"]/text()') print(result)
|
- 通配符
1)* - 通配符,表示所有类型的标签
1 2
| result = html_node.xpath('//*[@class="c1"]/text()') print(result)
|
分支
1)路径1|路径2 - 按照两种路径获取标签
1 2
| result = html_node.xpath('./body/div[1]/a|./body/div[1]/p') print(result)
|