我是靠谱客的博主 踏实黑裤,最近开发中收集的这篇文章主要介绍json请求和xpath解析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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解析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部