爬虫之jsonpath模块

1. jsonpath模块的安装

  1. jsonpath是第三方模块,需要额外的安装

    pip3 install jsonpath
    

2. jsonpath模块提取数据的方法

from jsonpath import jsonpath

# 返回对象是一个列表
ret = jsonpath(data, 'jsonpath语法')

3. jsonpath语法规则

JSONPath 描述
$ 根节点,即json数据最外层的大括号
@ 现行节点
. or [] 子节点
n/a 取父节点,Jsonpath未支持
.. 内部任意位置子孙节点
* 匹配所有元素节点
n/a 根据属性访问,Json不支持,因为Json是个Key-Value递归结构,不需要属性访问
[] 迭代器标识(可以在这里边做简单的迭代操作,如数组下标,根据内容选值等)
[,] 支持迭代器中做多选
?() 支持过滤操作
() 支持表达式计算
n/a 分组,JaonPath不支持

4. jsonpath应用示例

from jsonpath import jsonpath

data = {"key1": {"key2": {"key3": {"key4": {"key5": {"key6": "python3"}}}}}}

result = jsonpath(data, '$.key1.key2.key3.key4.key5.key6')
print(result)

result = jsonpath(data, '$..key6')
print(result)
"""
拉勾网json格式城市数据接口
https://www.lagou.com/lbs/getAllCitySearchLabels.json
"""

import json
from jsonpath import jsonpath

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
						  "(KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"}

resp = requests.get("https://www.lagou.com/lbs/getAllCitySearchLabels.json", headers=headers)

dict_data = json.loads(resp.content)

# 获取所有的城市开头的字母
result = jsonpath(dict_data, "$..allCitySearchLabels")[0].keys()
# print(result)

# 获取所有城市名
result = jsonpath(dict_data, "$..name")
# print(result)

# 获取以A开头的城市名
result = jsonpath(dict_data, "$..A..name")
print(result)

你可能感兴趣的:(爬虫篇)