一.JSON是什么
JSON是一种轻量级的数据交换格式,他使人们更容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。
前端(JS,HTML,CSS) → JSON → 后端(python)
后端(python) → JSON → 前端(JS,HTML,CSS)
- 我们学习爬虫主要是学习如何把JSON数据转换为python的格式,因为我们写python代码不会把数据返回前端页面
二.如何转换
1.导入JSON模块
import json #json是内置工具
2.python转JSON
json.dumps() python数据类型转json字符串
json.dump() python数据类型转json文件
注:
1.json数据key不能是元组只能是字符串
2.skipkeys=True异常数据过滤
3.ensure_ascii=False解决编码
# print(type(dict1))#<class 'dict'>
# json1=json.dumps(dict1)
# print(type(json1))#<class 'str'>json字符串
# print(type(str(json1)))#<class 'str'>不是json字符串
dict1[('2',1)]='元组'#添加一个元组类型的键值对
json2=json.dumps(dict1,skipkeys=True)#json数据key不能是元组只能是字符串,skipkeys=True异常数据过滤
print(json2)#{"a": 1, "b": 2}
dict1["c"]="元组"
json2=json.dumps(dict1,skipkeys=True)
print(json2)#{"a": 1, "b": 2, "c": "\u5143\u7ec4"}
json2=json.dumps(dict1,skipkeys=True,ensure_ascii=False)#ensure_ascii=False解决编码
print(json2)#{"a": 1, "b": 2, "c": "元组"}
with open('test.json','w',encoding='utf-8')as f:
json.dump(dict1,f,skipkeys=True,ensure_ascii=False)
3.JSON转python
json.loads() #json字符串转python数据类型
json.load() #json文件转python数据类型
with open('test.json','r',encoding='utf-8')as f:
data=f.read()
print(type(data))#<class 'str'>
dict1=json.loads(data)
print(dict1,type(dict1))#{'a': 1, 'b': 2, 'c': '元组'} <class 'dict'>
data1=json.load(f)
print(data1,type(data1))
- 简记:只要是str类型有关的就加s,由str → python对象就是导入loads
三.实战
import json
import requests
headers1={
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) ""AppleWebKit/537.36 (KHTML,likeGecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0"
}
response=requests.get(url="https://careers.tencent.com/tencentcareer/api/post/Query?timestamp"
"=1728065309345&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategory"
"Id=&attrId=1&keyword=&pageIndex=1&pageSize=10&language=zhcn&area=cn",headers=headers1)
#print(response.text)
result=json.loads(response.text) # json转python
data_list=result["Data"]["Posts"]
for i in data_list:# 循环列表每一个数据
#print(i)#每一条数据
title=i['RecruitPostName']
location=i['LocationName']
Time=i['LastUpdateTime']
print(title,location,Time)
print("==================================")
#如果爬取出的数据是字符串类型且有\n和\n\r两种换行
Responsibility=i['Responsibility'].replace('\r','').replace('\n','')
#采取分布替换,用两个replace
3738

被折叠的 条评论
为什么被折叠?



