概述
json数据
1.json的作用
让不同编程语言之间可以进行有效的数据交流(几乎所有的高级语言都支持json数据)
2.什么是json
一个有效的json有且只有一个数据,并且唯一的这个数据必须是json支持的类型的数据。
json支持的数据类型:
数字 --直接写,例如:100,12.5,-3,+4,3e4
字符串 --加双引号,只有双引号,例如:“张三”
布尔 —只有true和false两个值
空值 --null
数组 —想当于Python的列表
字典 --键必须是字符串
3.json数据解析
1)如果通过requests发送球球得到的数据就是json数据,可以直接用响应.json()将json数据转换成Python数据
2)非json接口提供的json数据的解析
a.json.loads(json格式的字符串) - 将json转Python,返回值的类型会因为字符串的内容不同而不一样
b.json.dumps(python数据) - 将Python数据转换json格式的字符串,返回值是字符串
xpath数据解析
lxml:可以通过xpath的方法来解析html数据和xml数据
1.创建树结构,获取根节点
etree.HTML(html代码) —将html页面创建成一个树结构,并且返回树的根节点
from lxml import etree
html_node = etree.HTML(open('files/网页.html').read())
print(html_node) # [<Element img at 0x1d46a639480>]
2.根据路径获取指定标签
节点对象.xpath(路径) —返回值是列表,列表中的元素就根据路径找到的所有的结果。
1)绝对路径------/从根节点开始写,全路径
p_node=html_node.xpath('/html/body/div/ul/li/p')[0].text
print(p_node) # 泡面
2)相对路径:./路径,…/路径
用.表示当前节点(哪个节点.xpath,当前节点就是哪个)
用…表示当前节点的上层节点
3)全局搜索://
语法://路径
3.获取标签内容和标签属性
1)标签内容:获取标签的路径/text()
result = html_node.xpath('//p')
print(result) # [<Element p at 0x10b74b880>, <Element p at 0x10b74b8c0>, <Element p at 0x10b74ba40>, <Element p at 0x10b74b980>, <Element p at 0x10b74bb00>]
result = html_node.xpath('//p/text()')
print(result) # ['什么都卖!', '可以购买的商品!', '泡面', '火腿肠', '可乐']
2)属性值:获取标签的路径/@属性名
result = html_node.xpath('//img')
print(result) # [<Element img at 0x108189a00>, <Element img at 0x108189b00>, <Element img at 0x108189980>, <Element img at 0x108189ac0>, <Element img at 0x108189b80>]
result = html_node.xpath('//img/@src')
print(result) # ['https://img1.baidu.com/it/u=3160659086,3725745087&fm=253&fmt=auto&app=120&f=JPEG?w=500&h=500', 'https://img1.baidu.com/it/u=3160659086,3725745087&fm=253&fmt=auto&app=120&f=JPEG?w=500&h=500', 'https://img1.baidu.com/it/u=3160659086,3725745087&fm=253&fmt=auto&app=120&f=JPEG?w=500&h=500', 'https://img0.baidu.com/it/u=1309756832,682125188&fm=26&fmt=auto', 'https://img0.baidu.com/it/u=707176316,890856051&fm=26&fmt=auto']
4.谓语
1)[N] —获取第N个(同级中取第N个)
2)[last()]----取同级最后一个
[last()-1]-----取同级中倒数第二个
[position()❤️] ----(1,2)获取前两个
result=html_node.xpath('//ul/li[2]/p/text()')
print(result)
result=html_node.xpath('//ul/li[last()]/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)
"""
['火腿肠']
['可乐']
['泡面']
['泡面', '火腿肠']
"""
3)属性值相关谓语
[@属性名=值] —获取指定属性为指定值的标签
result = html_node.xpath('./body/div[2]/ul/li/p[@class="c1"]/text()')
print(result) # ['泡面', '可乐']
5.通配符
星号*-----通配符,表示所有类型的标签
获取class为c1所有的标签:
result = html_node.xpath('//*[@class="c1"]/text()')
print(result) # ['泡面', '可乐']
6.分支
路径1|路径2 --按照两种路径获取标签
result = html_node.xpath('./body/div[1]/a|./body/div[1]/p')
print(result) # [<Element a at 0x1f79ff3a280>, <Element p at 0x1f79ff3a340>]
最后
以上就是踏实黑裤为你收集整理的json请求和xpath解析的全部内容,希望文章能够帮你解决json请求和xpath解析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复