前言
当响应数据不是纯json字符串,调用响应对象.json() 报错,需要先通过正则处理多余的内容,变成了一个长得像纯列表或者纯字典字符串数据,再把json字符串数据转为字典数据,进行数据解析
一、json字符串是什么?
前后端交互都会规定一种数据类型:json字符串--res.json()转为字典
二、数据解析步骤
以下载多种图片为案例
1.-多张图片url所在的url
https://image.so.com/j?callback=jQuery18304989526863714209_1725106262857&q=%E8%A1%A8%E6%83%85%E5%8C%85%E5%9B%BE%E7%89%87&qtag=&pd=1&pn=60&correct=%E8%A1%A8%E6%83%85%E5%8C%85%E5%9B%BE%E7%89%87&adstar=0&tab=all&sid=ce14b521d731a8f9d597d6c88bb05040&ras=6&cn=0&gn=0&kn=0&crn=0&bxn=0&cuben=0&pornn=0&manun=50&src=tab_www&sn=60&ps=121&pc=121&_=1725106397610
代码如下(示例):
url = 'https://image.so.com/j?callback=jQuery18304989526863714209_1725106262857&q=%E8%A1%A8%E6%83%85%E5%8C%85%E5%9B%BE%E7%89%87&qtag=&pd=1&pn=60&correct=%E8%A1%A8%E6%83%85%E5%8C%85%E5%9B%BE%E7%89%87&adstar=0&tab=all&sid=ce14b521d731a8f9d597d6c88bb05040&ras=6&cn=0&gn=0&kn=0&crn=0&bxn=0&cuben=0&pornn=0&manun=50&src=tab_www&sn=60&ps=121&pc=121&_=1725106397610'
import requests
res = requests.get(url)
result = res.text # 字符串
2.响应的内容不是一个长得像纯列表或者纯字典的数据
print(res.text)
requests.exceptions.JSONDecodeError: Expecting value: line 1 column 2 (char 1)
当前的响应数据不是纯json字符串 调用响应对象.json() 报错
print(res.json())
jQuery18304989526863714209_1725106262857({});
3.通过正则处理多余的内容,变成了一个长得像纯列表或者纯字典字符串数据
代码如下(示例):
import re
# 字符串数据:长的和字典一样
st = re.findall('\((.*?)\);', result)[0]
4.数据取值(取出图片的url)
当前是一个字符串数据,取出内容不太方便,最好是把这个数据变成字典/列表
import json
st_dict = json.loads(st) # 字典
5.保存图片
import os
if os.path.exists('360图片'):
print('已存在')
else:
os.mkdir('360图片')
# 把json字符串数据转为字典数据
import json
st_dict = json.loads(st) # 字典
count = 1
for i in st_dict['list']:
try:
# i=响应内容中list对应的列表中的每一条数据
# 取出图片url 发起请求,得到响应内容进行保存
img_url = i['_thumb']
img_res = requests.get(img_url)
# 文件名是变化的
# 后缀也要变化,如果图片是动图,保存的后缀就是.gif
# 后缀也要变化,如果图片是静图,保存的后缀就是.png .jpg
suffix = img_url.split('.')[-1]
with open(f'360图片\{count}.{suffix}', 'wb')as f:
# 字节数据
f.write(img_res.content)
count += 1
except:
continue
三、知识拓展
1.python中os模块创建文件夹
import os
if os.path.exists('360图片'):
print('已存在')
else:
os.mkdir('360图片')
2. python中json模块转换类型
import json
# info = {'name':'shuke'} # str -->{"name": "shuke"}
# # 字典转为json字符串
# info_str = json.dumps(info)
# print(type(info_str))
# info = {'name':'xxx'} #如果字典中的数据是中文,转为json字符串,中文会进行编码
# # 字典转为json字符串
# info_str = json.dumps(info,ensure_ascii=False) # ensure_ascii=False不让中文编码
# print(info_str)
# print(type(info_str))
info = '{"name": "xxx"}' # json字符串
# 字典
info_dict = json.loads(info)
print(info_dict)
print(type(info_dict))
总结
字典--通过json.dumps()-》转化为json字符串 json字符串--通过json.loads()-》转化为字典标签:info,python,print,json,url,字符串,解析,数据,字典 From: https://blog.csdn.net/2401_87633706/article/details/144461785