小源1108 2023-03-20 22:51 采纳率: 66.7%
浏览 34
已结题

把json转换成python字典,然后用键取值的方法

有没有宝贝用获取爬虫json数据后,把json转换成python字典,然后用键取值的方法获取想要的数据,可以帮我看看这个代码有什么问题吗?

我想要的就是可以输出up主的姓名,视频的标题,视频链接等,为什么总是找不到呀,明明就有

import json
import requests
import re
import pandas as pd
from pandas import json_normalize


headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0, Win64, 64) Applellike Gecko) chrome/109.0.0.0 Safari/537.36",
    "cookie": "buvid3=E345F73A-511A-BF9E-7CE8-92B066BAC09273242infoc; b_nut=1675755273; i-wanna-go-back=-1; _uuid=6645381010-AF1E-51024-61065-F23EAE44C36679682infoc; buvid_fp=7124b20b1dfb727c621a29bb7e499986; nostalgia_conf=-1; CURRENT_FNVAL=4048; buvid4=A5B19B32-7833-37F2-2DEF-61364D1EB8EA85116-023020715-js6gr3B%2BKX0Ja97hLY0x9w%3D%3D; rpdid=|(u)YJlkm)RY0J'uY~YRY|u)|; DedeUserID=482738501; DedeUserID__ckMd5=7b52a2d892bdfeba; b_ut=5; header_theme_version=CLOSE; home_feed_column=4; bp_video_offset_482738501=769995294581456900; b_lsid=C3796722_186FEF77A98; PVID=1; SESSDATA=b88354d0%2C1694867094%2Cbb43d%2A31; bili_jct=5f6c554803cf85ba5db3dd1d01394468; sid=g7436nlv"
}

def getJSONText(url):
    try:
        res = requests.get(url, headers=headers)
        res.raise_for_status()
        res.encoding = res.apparent_encoding
        # json转字典
        return json.loads(res.text)
    except:
        return ""

def find(target, dictData, notFound='没找到'):
    queue = [dictData]
    while len(queue) > 0:
        data = queue.pop()
        for key, value in data.items():
            if key == target: return value
            elif type(value) == dict: queue.append(value)
    return notFound

def parsePage(ilt,json_data):
    print(json_data)
    author = find('author', json_data)
    print(author)

def main():
    url = "https://api.bilibili.com/x/web-interface/search/all/v2?keyword=%E6%99%A8%E9%92%9F%E9%85%B1&page=2&pagesize=20&context="
    infoList = []
    json_data = getJSONText(url)
    parsePage(infoList, json_data)

if __name__ == '__main__':
    main()

这个是json转换成python字典得到的:

img

明明就有author这个键值对

但是后边就输出了每找到

img

我真的刚学,但是真的不会。

  • 写回答

3条回答 默认 最新

  • weixin_54587347 2023-03-21 00:11
    关注

    把json_data打印出来分析可以发现想要提取的结果在json_data["data"]["result"]里面;遍历result将其提取出来即可

    def parsedate(json_data):
        result = json_data.get('data', {}).get('result', [])
        for result_dict in result:
            data = result_dict.get('data', [])
            for detail in data:
                print("{}\t{}\t{}".format(detail.get("author", ""), detail.get("title", ""), detail.get("arcurl", "")))
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月29日
  • 已采纳回答 3月21日
  • 创建了问题 3月20日

悬赏问题

  • ¥15 用C语言完成一个复杂的游戏
  • ¥15 如何批量更改很多个文件夹里的文件名中包含文件夹名?
  • ¥50 MTK手机模拟HID鼠标出现卡顿
  • ¥20 求下下面这个数据结构代码
  • ¥20 前端 二进制文件流图片转化异常
  • ¥15 github上的这个C语言项目如何跑起来
  • ¥15 java 判断某个数 区间是否存在
  • ¥15 appium控制多个雷电模拟器问题
  • ¥15 C# iMobileDevice
  • ¥15 谁会做这个啊#ensp#Boson NetSim