ForGot_227 发表于 2021-3-5 15:01

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()                        #关闭文件


wanglaihuai 发表于 2021-3-5 15:07

dc是字符串,所以dc['next']报错啊。你再看一下get回来的数据格式。

ogli324 发表于 2021-3-5 15:12

你应该直接查看

ogli324 发表于 2021-3-5 15:15

你应该直接查看返回数据, 并按照json操作方式取值, 不要盲目干。
r = requests.get(w_next)
print(r.text)

# json取值 示例,不会的,百度 菜鸟教程
data = r.json()
xxx= data["xxx"]

ciker_li 发表于 2021-3-5 15:26

把d,dc都print一下看看

ForGot_227 发表于 2021-3-5 15:29

wanglaihuai 发表于 2021-3-5 15:07
dc是字符串,所以dc['next']报错啊。你再看一下get回来的数据格式。

回来的数据是json

ForGot_227 发表于 2021-3-5 15:37

ciker_li 发表于 2021-3-5 15:26
把d,dc都print一下看看

我把图编辑上去了,是不是在循环里还要重新改成json格式的才能用

seagulles 发表于 2021-3-5 16:02

首先你的输出我没看明白,
1、dict类型数据,按你图中的fordc in d 是打印不出来元组类型的数据的,应该是 for dc in d.items()
2、按照你给的图显示,你应该直接d['next']取值

ciker_li 发表于 2021-3-5 16:18

d是字典
dc就是你想要遍历的内容吧
把adc那行去了,直接print(dc),应该就是遍历d了
如果只想看next内容,可以用d['next']

ufo0033 发表于 2021-3-5 17:50

本帖最后由 ufo0033 于 2021-3-5 17:51 编辑

看下出错的是那一行数据
for dc in d:
    try:
      adc = dc['next']
      print(adc)
    except:
      print('出错行--',dc)
页: [1] 2
查看完整版本: python json数据处理求解答