【Python爬虫与数据分析】爬虫Json数据解析

article/2025/11/11 0:38:08

目录

一、Json文件数据解析

二、Json数据包解析获取图片资源

三、Json数据包解析获取视频资源


一、Json文件数据解析

json字符串:通常类似python数据类型中的列表和字典的结合,也可能是单独的列表或者字典格式,通常可以通过json模块的函数接口转换为python数据类型,也可将python中的数据类型转换成json字符串

json文件:后端通常将数据库的文件统一以json文件的格式传给前端,而前端在对json文件数据进行加工渲染,展示在前端页面。

很多时候,我们使用爬虫从前端页面获取的数据因为经过了加工渲染而并不完整,所以我们有时候需要通过获取后端的json文件数据包来获取数据

二、Json数据包解析获取图片资源

注:本代码仅供爬虫技术学习使用,无任何商业目的

上一篇文章中的王者荣耀英雄皮肤图片获取的途径是从前端代码中的url获取,一共只有93个英雄,获取得到的数据并不完整,而这次我们可以通过网络数据包中的json文件获取数据信息,再通过爬虫下载,一共有115个英雄,是游戏目前的全部英雄

找到网络数据包中的存放英雄信息的json文件数据包,在请求头中拿到json文件的url链接,然后下载得到json文件数据包。

下载王者荣耀全英雄皮肤图片代码:

import requests
import json
import osurl = "https://pvp.qq.com/web201605/js/herolist.json"
response = requests.get(url)    # 请求得到json包数据
# print(response.text)# 此处的json文件格式是列表里面包含字典元素
heroList = json.loads(response.text)
# print(len(heroList))        # 114for i in heroList:id = i['ename']name = i['cname']print(id, name)os.makedirs(f"./imag/{name}")   # 给每个英雄的皮肤单独创建目录# 找到英雄皮肤图片的url链接,对比观察寻找规律cnt = 1while True:try:url = f"https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{id}/{id}-bigskin-{cnt}.jpg"response = requests.get(url)if response.status_code != 200:breakwith open(f"./imag/{name}/skin-{cnt}.jpg", "wb") as f:f.write(response.content)cnt += 1except:print(Exception)break

三、Json数据包解析获取视频资源

 注:本代码仅供学习爬虫技术,无任何商业目的。

1. 首先打开抖音网页,搜索刘畊宏,进入刘教练的视频主页,选择检查,

想要爬取视频,有多种方式,可以通过you-get直接通过视频的网页链接进行下载,但是you-get在面对抖音的反爬机制的时候很多时候会失效,这时我们就要找到视频文件的数据包,直接通过网络请求获取视频文件。

在PC端选择网页,并刷新,查看网络数据包,寻找存放有视频的数据包,包名并没有统一的格式,需要逐一查找,这是一个依靠运气和经验的过程,也有可能根本找不到视频数据包。

查找数据包信息可以逐一查找,也可以按 ctrl F 进行关键字搜索再逐一查找带有关键字的数据包,两种方式都依靠经验和运气。

观察response(响应)里面的信息,一般视频文件前面都有“video”标签,而图片文件的链接会以p开头或者标签为img或p,这并不绝对,需要依靠经验判断。

2. 通过在PC端的数据包查找,我并没有找到存放视频文件的数据包,于是我们可以查找移动端的数据包,有可能能够找到,当然在移动端页面进行查找的前提是这个网页有移动端

通过video关键字的索引,在移动端的界面下,我找到一个包含video关键字的url,这里有3个url在url_list列表里,逐一进入这三个url,发现确实是我们需要的视频资源,而且这三个url是同一个视频。

3. 分析数据包里面的数据结构,我们打开一个叫sojson的工具,百度直接搜索就能用,进入后点击json在线解析,这个工具可以帮助我们整理字符串数据,将其转换为可以缩放的格式,方便我们观察数据包的整体结构

通过观察发现我们找到的第一个包含视频链接的url_list标签在play_addr标签下面,按 ctrl F 在sojson工具中对play_addr标签进行索引,找到第一个play_addr后对其他标签进行收缩,发现play_addr标签在video标签下,video标签的上一层是aweme_list标签。

4. 对aweme_list标签进行收缩,观察到里面有18条数据,代表aweme_list里面有18条视频数据

通过观察,这个数据包的结构是最外层为字典,'awere_list'关键字的value值是列表,列表里的元素都是字典,而字典的value值可能是字符串或者嵌套列表。

5. 获取请求数据包的url,在请求头里面可以找到url,请求方式为get,获取url的时候也可以从请求头里面获得user-agent、referer、cookied......信息

6. 获得响应信息response后,将之用json模块进行加载,json.loads(response.text),得到数据包的字典格式数据,然后再通过字典的关键字获得存放有视频信息的列表,再迭代遍历列表,获得每一个视频的文件url和标题 

直接对每一个视频文件的url进行网络请求,并将请求得到的数据以二进制格式写入.mp4后缀的文件中,即完成了下载,代码中存放视频的目录请自己定义

import requests
import json
import osurl = 'https://www.douyin.com/aweme/v1/web/aweme/post/?device_platform=webapp&aid=6383&channel=channel_pc_web&sec_user_id=MS4wLjABAAAASwhiL0bRi1X_zs7UhAIO2udbD1F_XKrsJMOaukl1Io4&max_cursor=1677067200000&locate_query=false&show_live_replay_strategy=1&count=18&publish_video_strategy_type=2&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1536&screen_height=864&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=113.0.0.0&browser_online=true&engine_name=Blink&engine_version=113.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=50&webid=7201915628194022912&msToken=KLZL7g62CU1OsQ9ZN6MP7VxpOUz2EiwBk1jNRlLoINJEUePgZg-aVWpPAL3LFGL31AYMV3qWtQTlqtxvHIp63YBHJKHELw_3qq0s6kaG6OG3bfqt2cN8Xg==&X-Bogus=DFSzKwVubWXANVl8tJhgWBt/pLvt'header = {'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Mobile Safari/537.36','referer': 'https://www.douyin.com/user/MS4wLjABAAAASwhiL0bRi1X_zs7UhAIO2udbD1F_XKrsJMOaukl1Io4','cookie': 'ttwid=1%7CSfdsymdYx1QlfjQTR3xYeFSNa9O6q4f1wFp6BtrRqxs%7C1676826682%7C30e0eb856043a47a208c80c1af10d30fc0cfcf4e270115abae592c5ec3873249; d_ticket=5bc0d2611324cd7fbfc9e0f926fec81dc0d98; n_mh=48GDnZrzh9L0L71QYQe9RHV7INgvIpqOtZbHqRblemk; LOGIN_STATUS=1; store-region=cn-zj; store-region-src=uid; my_rd=1; MONITOR_WEB_ID=685b146d-4ed6-4aa6-aca0-faab96f8cf42; douyin.com; device_web_cpu_core=16; device_web_memory_size=8; webcast_local_quality=null; strategyABtestKey=%221688567746.879%22; sso_uid_tt=6058615d39e33507497ddd539f47deeb; sso_uid_tt_ss=6058615d39e33507497ddd539f47deeb; toutiao_sso_user=b9b49cd114e343c3769792cb05950869; toutiao_sso_user_ss=b9b49cd114e343c3769792cb05950869; sid_ucp_sso_v1=1.0.0-KDFkNmJjYjBkYTc1OTdiOTNjY2EwOWVjMzA4YmQwNWM0YTcxOTA3NGQKCRDD_5WlBhjvMRoCbGYiIGI5YjQ5Y2QxMTRlMzQzYzM3Njk3OTJjYjA1OTUwODY5; ssid_ucp_sso_v1=1.0.0-KDFkNmJjYjBkYTc1OTdiOTNjY2EwOWVjMzA4YmQwNWM0YTcxOTA3NGQKCRDD_5WlBhjvMRoCbGYiIGI5YjQ5Y2QxMTRlMzQzYzM3Njk3OTJjYjA1OTUwODY5; passport_csrf_token=b36f107eb1f86486b5946c1615b05276; passport_csrf_token_default=b36f107eb1f86486b5946c1615b05276; odin_tt=8be0aee3be15b092d053ad20045320656173ff5fab52b26d527858f414c45896; sid_guard=5443fa7b2b56f9a07aee61e8f36daac1%7C1688567748%7C21600%7CWed%2C+05-Jul-2023+20%3A35%3A48+GMT; uid_tt=acd1f407a3f1d7894a1653efdd479f41; uid_tt_ss=acd1f407a3f1d7894a1653efdd479f41; sid_tt=5443fa7b2b56f9a07aee61e8f36daac1; sessionid=5443fa7b2b56f9a07aee61e8f36daac1; sessionid_ss=5443fa7b2b56f9a07aee61e8f36daac1; sid_ucp_v1=1.0.0-KDU0OGJkYTI2ZTNjMWM1NjA3Yjc3Njk1ZmM3Mjg0OWY3MTdhM2M0YmEKCBDE_5WlBhgNGgJsZiIgNTQ0M2ZhN2IyYjU2ZjlhMDdhZWU2MWU4ZjM2ZGFhYzE; ssid_ucp_v1=1.0.0-KDU0OGJkYTI2ZTNjMWM1NjA3Yjc3Njk1ZmM3Mjg0OWY3MTdhM2M0YmEKCBDE_5WlBhgNGgJsZiIgNTQ0M2ZhN2IyYjU2ZjlhMDdhZWU2MWU4ZjM2ZGFhYzE; s_v_web_id=verify_ljptn0ct_kfiNKmlP_dyZH_47Aw_Aa38_Ft8lUaobhxaE; __bd_ticket_guard_local_probe=1688567747233; __ac_nonce=064a57fc40047d7bc5fa4; __ac_signature=_02B4Z6wo00f01XnbypAAAIDA8pBRcRDkeQl5-84AADrX8ttGZsqVOhTieUZ2pt27EMIqPRl1Kli8-x0yYjBdJ7zXwvykc-U4kkF00iB1e.yTLrCY2O5q7RNkrRl3ggCX5kR8gLBBUr.jlsTD8b; VIDEO_FILTER_MEMO_SELECT=%7B%22expireTime%22%3A1689172548703%2C%22type%22%3Anull%7D; bd_ticket_guard_client_data=eyJiZC10aWNrZXQtZ3VhcmQtdmVyc2lvbiI6MiwiYmQtdGlja2V0LWd1YXJkLWl0ZXJhdGlvbi12ZXJzaW9uIjoxLCJiZC10aWNrZXQtZ3VhcmQtY2xpZW50LWNlcnQiOiItLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS1cbk1JSUNGakNDQWJ1Z0F3SUJBZ0lWQUtuaVp0K09XZEZtT2FNSGlCZFYycnY1TmRuK01Bb0dDQ3FHU000OUJBTUNcbk1ERXhDekFKQmdOVkJBWVRBa05PTVNJd0lBWURWUVFEREJsMGFXTnJaWFJmWjNWaGNtUmZZMkZmWldOa2MyRmZcbk1qVTJNQjRYRFRJek1EUXhOREUyTkRJeE5sb1hEVE16TURReE5UQXdOREl4Tmxvd0p6RUxNQWtHQTFVRUJoTUNcblEwNHhHREFXQmdOVkJBTU1EMkprWDNScFkydGxkRjluZFdGeVpEQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlcbkF3RUhBMElBQkpTVmplb1c4QTBpbmVHd3RBQ2xaTVZrS1F0djlvTDEzT0pPYUp3SVdGaEtTcUpPSkNVT3liK3pcbnFwb3grVFNNYzYxV2RtVFB4VkxPOTJOeXRrWFZ5VUdqZ2Jrd2diWXdEZ1lEVlIwUEFRSC9CQVFEQWdXZ01ERUdcbkExVWRKUVFxTUNnR0NDc0dBUVVGQndNQkJnZ3JCZ0VGQlFjREFnWUlLd1lCQlFVSEF3TUdDQ3NHQVFVRkJ3TUVcbk1Da0dBMVVkRGdRaUJDREFka0kxdHNKblV5K3ZsUGw2ZmxyWEJyT3d4eFFXWE5Pejd2MmRJcmZubWpBckJnTlZcbkhTTUVKREFpZ0NBeXBXZnFqbVJJRW8zTVRrMUFlM01VbTBkdFUzcWswWURYZVpTWGV5SkhnekFaQmdOVkhSRUVcbkVqQVFnZzUzZDNjdVpHOTFlV2x1TG1OdmJUQUtCZ2dxaGtqT1BRUURBZ05KQURCR0FpRUFzQ2ZRcUtJa05sZVFcbjdUOHg5MjFMYmhzdFJkSS9OblllVGFMS1dnNUQ0cFlDSVFDeERpZnRKMXdQMWNkWEIwWHNKck0yVXYwZGJYczVcbk1GbFdjRzBDaU5MY0d3PT1cbi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS1cbiJ9; FORCE_LOGIN=%7B%22videoConsumedRemainSeconds%22%3A180%7D; csrf_session_id=d792449829359253fa25f0a8d9e72a59; SEARCH_RESULT_LIST_TYPE=%22single%22; home_can_add_dy_2_desktop=%221%22; msToken=EY2sJBH_qEN4ep44noUrXW_qzCkWVNvtjWaTqWkqVAZgC9JMQUoQs6kryIFMcrSdONLSkfIEAu2NXOZ2r_jocknLqOxnwDn6sucTrDTivy5oSmnYs2V9fA==; download_guide=%221%2F20230705%2F0%22; msToken=KLZL7g62CU1OsQ9ZN6MP7VxpOUz2EiwBk1jNRlLoINJEUePgZg-aVWpPAL3LFGL31AYMV3qWtQTlqtxvHIp63YBHJKHELw_3qq0s6kaG6OG3bfqt2cN8Xg==; tt_scid=IKrnsboqod05Ql8FTZwSOJiRmmThn7J2ziAKN17O5cWleCch8dPbt7lG9qxdm9ed54d6; pwa2=%220%7C0%7C1%7C0%22'
}response = requests.get(url, headers=header)
# print(response.text)# 通过json提取数据,通过观察可得json最外层是字典格式
data_dict = json.loads(response.text)
data_list = data_dict['aweme_list']     # data_list的每一个元素是字典
# print(len(data_list))   # 18os.makedirs(f"./DouYin/")for i in data_list:v_title = i['desc']v_url = i['video']['play_addr']['url_list'][0]print(v_title, v_url)    #通过观察可得第一个和最后一个链接是音频res = requests.get(v_url, headers=header)with open(f"./DouYin/{v_title}.mp4", "wb") as f:f.write(res.content)


http://chatgpt.dhexx.cn/article/fEfibESB.shtml

相关文章

Json格式数据解析

一、简介 XML这种数据格式。XML的特点是功能全面,但标签繁琐,格式复杂。在Web上使用XML现在越来越少,取而代之的是JSON这种数据结构。 JSON是JavaScript Object Notation的缩写,它去除了所有JavaScript执行代码,只保…

JSON解析

#粤嵌星计划,粤嵌我来了# #粤嵌星计划,粤嵌我来了# 1、什么是JSON (1)JSON(Java Script Object Notation)是一种轻量级的数据交换语言,以文本字符串为基础,且易于让人阅读。&#x…

内网穿透原理解析

在互联网信息时代的今天,经常会听到外网连接。而与外网所相对应的,是一种内部网络,很多的家庭或者公司利用内部网络来进行多台电脑之间的资源共享,其中所用到的技术就是内网穿透技术,但却有很多的人对这种技术并不了解…

内网穿透原理概要

详细原理的解析 https://blog.csdn.net/xinpz/article/details/82732217 运行原理流程图 什么是内网穿透? 内网穿透是我们在进行网络连接时的一种术语,也叫做NAT穿透,即在计算机是局域网内的时候,外网与内网的计算机的节点进行连接时所需…

内网穿透内容讲解

内网穿透又叫端口映射,用一句最简单的话来讲就是:将你的计算机所连接的私有网络映射到公网上,别人通过你给的域名或ip即可访问你本地的服务。具体的原理可参照百度百科 这么做可以实现各大厂商的云服务器(阿里云,腾讯云…

内网穿透你真的了解吗?

前言 内网穿透作为程序员常用的调试手段之一,我们可以通过在个人电脑上运行花生壳或者 frp 等方式,让他人访问我们本地启动的服务,而且这种访问可以不受局域网的限制,当我们使用ngrok,frp等开源框架时,你是否有好奇过…

Ngrok内网穿透

Ngrok一款内网穿透工具,它可以将本地部署的Web应用能够让公网环境直接访问到。ngrok是一个反向代理,通过在公共端点和本地运行的Web服务器之间建立一个安全的通道,实现内网主机的服务可以暴露给外网。所以它提供了一个能够在公网安全访问内网…

大白话告诉你内网穿透原理和验证

内网穿透到底干啥的这里不做详述,这篇文章主要是讲这玩意怎么做的 分析 网上有很多原理图,但是说实话鄙人天资愚钝没咋看懂,在网上疯狂百度和个人的验证之后,得出如下简图 其实很简单 想让我们内网的服务能被外网访问到&#x…

frp内网穿透原理及配置应用

1 Frp介绍 frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。 frp 项目官网 https://github.com/fatedier/frp 中文文档 https://github.com/fat…

内网穿透原理,以及用花生壳实现内网穿透

在做自学项目部署nginx的时候,nginx部署在阿里云服务器上,项目在本地,阿里云的nginx无法访问到本地的ip,所以需要做一下内网穿透。记录一下 什么是内网穿透? 内网和外网的概念: 内网:即所说的局…

内网穿透原理和实现

什么是内网穿透 作者:匿名用户 链接:https://www.zhihu.com/question/63098230/answer/1929852198 希望对你们更易懂要知道这个的意思,需要先来点前菜 1、地球上的电脑设备等要实现通信,都需要有个IP地址才可以实现。 2、IP地址…

内网穿透原理和实现思路介绍

内网穿透技术,简单理解就是将内网的服务映射到公网中,这样可以随时随地访问。 那什么是内网?什么是公网?先从这个基本概念来简单介绍吧 1. 公网、内网和外网 首先声明,公网、内网和外网这几个概念,不是专…

内网穿透工具frp原理和使用教程

内网穿透(Port Forwarding)是将公网上的IP地址映射到内部网络中的一台计算机的某个端口上,以便外部网络可以访问该计算机中运行的应用程序。内网穿透技术可以通过一些开源工具来实现,其中比较常用的是frp。在本文中,我…

内网穿透原理

前言 内网穿透一般在家庭用户下NAS设备在经常折腾,实际上企业云服务就是典型的内网穿透,只不过方式原理有点不同,家庭网络因为宽带的上传限制和没有公网IP,难度大于企业宽带。实际上内网穿透就是反向代理,域名解析&am…

内网穿透的实现和原理解析

需求场景: 基于微信平台开发服务号,本地移动端测试时,需要在微信平台注册测试号,然后填写接口配置信息,此信息需要你有自己的服务器资源,填写的URL需要正确响应微信发送的Token验证。如何能让外网访问到本地服务器呢&…

MacBook M1 Idea集成SVN

1.检查是否安装SVN svn —version2.检查是否安装了brew brew -v3.安装 brew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)” speed4.记住安装路径 5.配置国内镜像源HOMEBREW BOTTLE 6.svn安装前需要执行 按照/usr/local路径…

IntelliJ IDEA上svn分支管理和使用

IntelliJ IDEA上svn分支管理和使用 从Subversion下载trunk下的代码 选择项目创建分支 右键 Subversion --> branch or Tag … 选择Repository Location:需要创建的项目 选择Any Location 分支的位置和名字 详细查看截图 切换到分支 选择项目右键Subversion --> Update …

vscode / idea 使用SVN及查看历史记录

一、vscode使用 SVN 1、在vscode插件中心搜索svn 进行安装(我这里已经安装完毕了) 注意:插件安装成功,需要重新启动软件。 安装成功后会出现如下的图标: 2、桌面右键使用SVN Checkout… 来检出远程库的代码&#xf…

IDEA之配置SVN

最近在公司的开发项目过程中,发现有关idea2020的svn配置方法都参差不齐,所以整理了有关idea2020整合svn的步骤; 目录 一、SVN配置1.1 下载SVN1.2 安装SVN1.3 配置SVN 二、常见问题2.1 Warning:java: 源值1.5已过时 一、SVN配置 1.1 下载SVN…

IDEA使用svn拉取多模块项目

如果没有安装过svn客户端,安装的时候需要选择安装第二个工具,如下图所示 安装小乌龟, 自行搜索, 注意点是需要选择安装第二个工具 因为默认是不安装的, 而这个组件是集成到IDEA ”必须的” . 如果是已经安装好的, 但是没有选这个的也是有办法的 办法一: 更改小乌龟 在卸载小乌龟…