python json数据处理求解答
本帖最后由 ForGot_227 于 2021-3-9 11:48 编辑起因呢,我很久以前用的一个工具更新了,之前用的是docker最新版本,但后来更新之后数据什么都变了,需要重新开发,但目前我只负责修复,只能找回原本的镜像。
我打算根据images id去匹配原先的版本,但版本号太多了,所以想抓一遍。
在获取到数据之后,使用json() 改为 dict ,然后想用for循环去加载,但始终加载不了,一直提示“TypeError: string indices must be integers” 字符串索引必须是整数
不知道怎么解决,有哪位大哥可以教一下
r = requests.get(w_next)
d = r.json()
for dc in d:
adc = dc['next']
print(adc)
直接打印所有结果
看了下C的值,是不是要重新改成数组或者字典才能使用?
------------------
3-9 编辑已解决。 下面附上写的代码,第一次尝试写这个,若很差,烦请指点下。
主要作用,抓取 docker 某镜像的所有版本和sha256的值,因为images id是sha256的前几位,我仅用来看以前用过的是那个版本。
# -*- coding:utf-8 -*-
import requests
import time
"""变量"""
tag = 'rasa/rasa-x' #docker image name
file = 'F:\\\\python\\rasa-x.txt' #写入文件,目前仅TXT,其他格式自行修改
w_next = 'https://hub.docker.com/v2/repositories/'+tag+'/tags/?page_size=25&page=1&ordering=last_updated' #拼接接口地址
"""代码"""
file_handle=open(file, mode='w') #打开文件
while bool(w_next): #判断是否有下一页,false则结束
r = requests.get(w_next)
w_datas = r.json()
w_next = w_datas['next']
print(w_next)
w_results = w_datas['results']
for datas in w_results:
if datas['images'] != []: #避免 images为空报错
data = datas['images']
tagdigest = data['digest']
else:
tagdigest = ''
tagname = datas['name']
write_text = "版本:" + tagname + " " + tagdigest + '\n' #写入文本编辑
file_handle.write(write_text) #写入文件
#print(write_text)
time.sleep(5)
file_handle.close() #关闭文件
dc是字符串,所以dc['next']报错啊。你再看一下get回来的数据格式。 你应该直接查看 你应该直接查看返回数据, 并按照json操作方式取值, 不要盲目干。
r = requests.get(w_next)
print(r.text)
# json取值 示例,不会的,百度 菜鸟教程
data = r.json()
xxx= data["xxx"]
把d,dc都print一下看看 wanglaihuai 发表于 2021-3-5 15:07
dc是字符串,所以dc['next']报错啊。你再看一下get回来的数据格式。
回来的数据是json ciker_li 发表于 2021-3-5 15:26
把d,dc都print一下看看
我把图编辑上去了,是不是在循环里还要重新改成json格式的才能用 首先你的输出我没看明白,
1、dict类型数据,按你图中的fordc in d 是打印不出来元组类型的数据的,应该是 for dc in d.items()
2、按照你给的图显示,你应该直接d['next']取值 d是字典
dc就是你想要遍历的内容吧
把adc那行去了,直接print(dc),应该就是遍历d了
如果只想看next内容,可以用d['next']
本帖最后由 ufo0033 于 2021-3-5 17:51 编辑
看下出错的是那一行数据
for dc in d:
try:
adc = dc['next']
print(adc)
except:
print('出错行--',dc)
页:
[1]
2