当前位置: 首页 > article >正文

爬虫系列之【数据解析之JSON】《三》

目录

前置知识

一、 json.loads():JSON 转 Python 数据

二、json.dump():python数据 转 json 并写入文件

 三、json.loads() :json 转 python数据

四、json.load() :json 转 python数据(在文件操作中更方便)

五、实战案例

完整代码演示


前置知识

1,不涉及文件操作
json 字符串 => 转换成 => python 数据类型 :json.loads()
python 数据类型 => 转换成 => json 字符串 :json.dumps()2,涉及文件操作
包含 json 的类文件对象 => 转换成 => python 数据类型 :json.load()
python 数据类型 => 转换成 => 包含 json 的类文件对象 :json.dump()# 总结:不加 s 涉及到文件操作

json用于数据交换

JS(前端) -> json -> python(后端)
python(后端) -> json -> JS(前端)


一、 json.loads():JSON 转 Python 数据

import json
# 1,python数据类型 转 json字符串
# python 字典数据
dic = {'a':1,'b':2}
print(type(dic))  #打印类型:字典类型
# 2,python数据 转成 json数据
json1 = json.dumps(dic)
# 3,打印结果
print(type(json1))   #结果是str,就是json字符串
# 4,增加键值
dic[('2',1)] = '元组'   #错误,不能这样添加
dic["c"]='元组'         # 正确
# 5,json数据key不能是元组,skipkeys=True可以过滤异常数据,ensure_ascii=False可以解决编码问题
json2 = json.dumps(dic,skipkeys=True,ensure_ascii=False)print(json2)
print(type(json2))


二、json.dump():python数据 转 json 并写入文件

import json
# 1,python字典数据
dic = {'a':1,'b':2}
with open('text.json','w',encoding='utf-8') as f:# 参数1:要转成json格式并保存的数据# 参数2:文件指针json.dump(dic,f,skipkeys=True,ensure_ascii=False)


 三、json.loads() :json 转 python数据

import json
# text.json中是刚才存储的 json 数据
with open('text.json','r',encoding='utf-8') as f:data = f.read()print(data)print(type(data))  #json字符串# 转换dic = json.loads(data) # python字典print(type(dic))


四、json.load() :json 转 python数据(在文件操作中更方便)

import json
# text.json中是刚才存储的 json 数据
with open('text.json','r',encoding='utf-8') as f:# 转换dic = json.load(f) #python字典print(f"字典数据:{dic}\n类型:{type(dic)}")


五、实战案例

需求:爬取腾讯招聘信息的《标题》《城市》《日期》

链接:搜索 | 腾讯招聘

分析步骤:

1,找到目标url

目标URL:https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1740842427771&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=1&keyword=&pageIndex=1&pageSize=10&language=zh-cn&area=cn

2,分析响应数据

可以进一步验证:

将数据全选复制进入 在线代码格式化 验证是否为 json 格式

3,分析一下数据内容

我们需要的数据层级关系,转换成字典后:
Data > Posts > 列表n > RecruitPostName(标题) LocationName(城市) LastUpdateTime(日期)

特别注意:Posts是一个列表 


完整代码演示


import json
import requests# 1,目标url
url = 'https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1740842427771&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=1&keyword=&pageIndex=1&pageSize=10&language=zh-cn&area=cn'
# 2,身份伪装
header={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36"
}
# 3,发起请求获取响应
response = requests.get(url=url,headers=header)
# 4,打印响应内容
# print(response.text)
print(type(response.text))  #json字符串类型# 5,将json字符串转换成python数据
result = json.loads(response.text)
print(type(result))  # 字典类型# 6,提取需要的信息:标题+城市+日期
title = result['Data']['Posts']
for tit in title:# print(tit)print(f"{tit['RecruitPostName']} ,{tit['LocationName']} ,{tit['LastUpdateTime']}")# 字符串替换:result = str.replace(r'\n','')


拓展

实现多页爬取分析步骤

1.分别获取到第一页、第二页、第三页的 url 对比

# 第一页
https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1740904582702&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=1&keyword=&pageIndex=1&pageSize=10&language=zh-cn&area=cn
# 第二页
https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1740904630357&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=1&keyword=&pageIndex=2&pageSize=10&language=zh-cn&area=cn
# 第三页
https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1740904538329&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=1&keyword=&pageIndex=3&pageSize=10&language=zh-cn&area=cn

# 特别提醒:测试可以直接将上面的url放入导航栏查看响应数据,还有可以删掉一些参数查看对响应数据有没有影响
对比之后发现只有两个地方不同
1, pageIndex 页数
2, timestamp 时间戳

测试后发现,时间戳固定对爬取数据没有任何影响,因此多页爬取只需要变化 pageIndex 的值即可

# 伪代码:
for i in range(1,11):url = f"https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1740904630357&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=1&keyword=&pageIndex={i}&pageSize=10&language=zh-cn&area=cn"# 这样就可以得到十页的url了,剩下的爬取工作是一样的print(url)

相关文章:

爬虫系列之【数据解析之JSON】《三》

目录 前置知识 一、 json.loads():JSON 转 Python 数据 二、json.dump():python数据 转 json 并写入文件 三、json.loads() :json 转 python数据 四、json.load() :json 转 python数据(在文件操作中更方便&#xf…...

了解Java集合的概念和体系:Collection<T>、Collections与Stream的使用

学习目标 本文知识是对集合层级的介绍,应用开发中实际使用的是他们的子级,感兴趣的小伙伴或者想深入了解有关Java集合知识的朋友可以选择阅读! Stream的方法使用使用部分代码块内大多有两种实现方式,是为了更好的理解方法底层的代…...

进程优先级和进程切换 ─── linux第12课

目录 Z(zombie)-僵尸进程 僵尸进程危害 孤儿进程 ​编辑 进程优先级 查看系统进程 用top命令更改已存在进程的nice: 其他概念 进程切换 进程如何切换 进程的调度 进程 内核数据结构 代码和数据 创建进程时 ,先创建内核数据结构 再加载代码和数据 进程退…...

光速解决phpstudy无法启动MySQL服务

问题描述 在初步安装使用phpstudy时,会出现mysql服务启动失败的情况,具体表现为点击一键启动后,mysql启动又立即停止 原因及解决方法: phpstudy数据库无法启动有以下几个原因,可以看看自己是第几种: 服务名…...

深度学习五大模型:CNN、Transformer、BERT、RNN、GAN详细解析

# 深度学习五虎将:当CNN遇见Transformer的奇幻漂流 ## 序章:AI江湖的兵器谱排行 2012年,多伦多大学的厨房里,Hinton的学生们用GPU煎了个"AlexNet"荷包蛋,从此开启了深度学习的热兵器时代。如今五大模型各显…...

txt 转 json 使用python语言

需求: 把如下的txt文档转成json输出 代码 import jsondef txt_to_json(input_file, output_file):data_list []with open(input_file, r, encodingutf-8) as f:for line in f:# 分割数据并去除换行符parts line.strip().split(,)print(f"{parts}")print(type(par…...

FPGA开发,使用Deepseek V3还是R1(4):Deepseek参数配置

​ 以下都是Deepseek生成的答案 FPGA开发,使用Deepseek V3还是R1(1):应用场景 FPGA开发,使用Deepseek V3还是R1(2):V3和R1的区别 FPGA开发,使用Deepseek V3还是R1&…...

Cargo, the Rust package manager, is not installed or is not on PATH.

今天在Windows操作系统上通过pip 安装jupyter的时候遇到这个报错,Cargo, the Rust package manager, is not installed or is not on PATH.。 解决办法 官网:https://rustup.rs/# 下载:https://win.rustup.rs/x86_64 安装完成之后&#xff0c…...

Go开发框架Sponge+AI助手协同配合重塑企业级开发范式

在互联网高速发展的今天,企业级应用系统面临着日益复杂的业务逻辑和不断增长的开发需求。如何在保证高质量、高效率的前提下快速交付项目,成为了开发者亟需解决的问题。本文将详细介绍如何利用开源的 go 开发框架 Sponge 与 AI 助手协同配合全过程&#…...

从递归到动态规划(三维)

问题描述 假设有一个三维空间的网格,其大小为 m x n x p。我们从坐标 (0, 0, 0) 出发,要到达坐标 (m - 1, n - 1, p - 1)。每次只能在三个方向上移动:向前(x 坐标加 1)、向右(y 坐标加 1)或向上…...

JavaWeb个人笔记

技术栈 前端 : HTML CSS JavaScript ES6 Nodejs npm vite vue3 router pinia axios element-plus 后端&#xff1a;HTTP xml Tomcat Servlet Request Response Cookie Sesssion Filter Listener MySQL JDBC Druid Jackson lombok jwt . HTML <!DOCTYPE html> 文档声…...

【vue-echarts】——01.认识echarts

文章目录 前言一、echarts二、使用步骤1.vue cli创建项目并安装第三方模块echarts2.显示图表总结前言 定制的数据可视化图表。ECharts最初由百度团队开源,并于2018年初捐赠给Apache基金会,成为ASF孵化级项目。2021年1月26日晚,Apache基金会官方宣布ECharts项目正式毕业。 一…...

http报文的content-type参数和spring mvc传参问题

很早之前博主聊过HTTP的报文结构以及其中和传参相关的重要参数content-type还有spring mvc&#xff0c;以前的三篇文章&#xff1a; HTTP与HTTPS协议详解&#xff1a;基础与安全机制-CSDN博客 详解Http的Content-Type_content-type application-CSDN博客 如何在Spring Boot中…...

005 公网访问 docker rocketmq

文章目录 创建自定义网络创建NameServer容器创建Broker容器正式开始启动 Nameserver 容器启动 Broker 容器并关联 Nameserverdocker exec -it rmqbroker vi /etc/rocketmq/broker.conf检查 namesrv 解析检查 Broker 注册状态Nameserver 日志Broker 日志检查容器日志手动指定 Br…...

14. LangChain项目实战1——基于公司制度RAG回答机器人

教学视频&#xff1a; 12. 基于Gradio搭建基于公司制度RAG_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV11VXRYTErZ/ 环境配置&#xff1a; python版本&#xff1a;3.10.8 服务器&#xff1a;Ubuntu 依赖包requirements.txt文件内容&#xff1a; aiofiles23.2.1 …...

FPGA开发,使用Deepseek V3还是R1(6):以滤波器为例

以下都是Deepseek生成的答案 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;1&#xff09;&#xff1a;应用场景 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;2&#xff09;&#xff1a;V3和R1的区别 FPGA开发&#xff0c;使用Deepseek V3还是R1&#x…...

JVM常用概念之垃圾回收设计与停顿

在我们应用程序运行期间&#xff0c;我们是需要尽可能避免垃圾回收。 图1&#xff1a;不同垃圾回收器的设计&#xff08;黄色代表STW&#xff0c;绿色代表并发&#xff09; 实验 计算机配置 Hardware Overview:Model Name: MacBook ProModel Identifier: MacBookPro14,2Pro…...

uniapp-原生android插件开发摘要

uni-app在App侧的原生扩展插件&#xff0c;支持使用java、object-c等原生语言编写&#xff0c;从HBuilderX 3.6起&#xff0c;新增支持了使用uts来开发原生插件。 基础项目 UniPlugin-Hello-AS工程请在App离线SDK中查找 基础项目(App离线SDK)已经配置好了自定义插件所需要的…...

Python之参数星号(*)使用笔记

背景 在学习python时发现方法调用和方法定义会经常发现有带星号的标记&#xff0c;为了弄明白是怎么使用的。特此做个笔记。 一、参数符号对比速查表 符号类使用场景作用描述示例无符号函数定义/调用普通位置参数或关键字参数.def func(a, b)*函数定义收集多余位置参数为元组…...

2025年AI网络安全攻防战:挑战深度解析与全链路防御体系构建指南

2025年AI网络安全攻防战:挑战深度解析与全链路防御体系构建指南 引言:AI技术是一把双刃剑 随着ChatGPT、Sora等生成式AI技术的爆发式应用,2025年被称为“AI应用元年”。然而,AI在赋能网络安全防御的同时,也为攻击者提供了新型武器。根据瑞星《2024年中国网络安全报告》,…...

派可数据BI接入DeepSeek,开启智能数据分析新纪元

派可数据BI产品完成接入DeepSeek&#xff0c;此次接入标志着派可数据BI在智能数据分析领域迈出了重要一步&#xff0c;将为用户带来更智能、更高效、更便捷的数据分析体验。 派可数据BI作为国内领先的商业智能解决方案提供商&#xff0c;一直致力于为用户提供高效、稳定易扩展…...

M4 Mac mini运行DeepSeek-R1模型

前言 最近DeepSeek大模型很火&#xff0c;实际工作中也有使用&#xff0c;很多人觉得需要很好的显卡才能跑起来&#xff0c;至少显存需要很高&#xff0c;但实际上一般的核显机器也能跑起来&#xff0c;只不过内存要求要大&#xff0c;对于个人而言&#xff0c;实际上Mac M芯片…...

MaxKB上架至阿里云轻量应用服务器镜像市场

近日&#xff0c;MaxKB开源知识库问答系统已上架至阿里云轻量应用服务器镜像市场&#xff0c;目前是阿里云此类镜像市场中唯一推荐的AI应用镜像。 ▲图1 MaxKB已经上架至阿里云轻量应用服务器镜像市场 MaxKB是飞致云旗下开源项目&#xff0c;是一款基于大语言模型和RAG&…...

【UI设计——陕西红富士苹果海报分享】

陕西红富士苹果海报设计分享 为大家带来一款陕西红富士苹果的宣传海报设计。 海报以柔和的粉色为背景&#xff0c;营造出温馨的氛围。画面下方展示了色泽红润、形态饱满的红富士苹果&#xff0c;既有完整的果实&#xff0c;也有切开的剖面&#xff0c;直观呈现其诱人外观。 上…...

[KEIL]单片机技巧 01

1、查看外设寄存器的值 配合对应的芯片开发手册以查看寄存器及其每一位的意义&#xff0c;可以解决90%以上的单纯的片内外设bug&#xff0c;学会如何通过寄存器的值来排外设上的蛊是嵌入式开发从小白到入门的重要一步&#xff0c;一定要善于使用这个工具&#xff0c;而不是外设…...

【网络安全 | 渗透测试】GraphQL精讲二:发现API漏洞

未经许可,不得转载。 推荐阅读:【网络安全 | 渗透测试】GraphQL精讲一:基础知识 文章目录 GraphQL API 漏洞寻找 GraphQL 端点通用查询常见的端点名称请求方法初步测试利用未清理的参数发现模式信息使用 introspection探测 introspection运行完整的 introspection 查询可视化…...

MySQL练习

将安装包下载并上传 方法一 步骤 创建组与用户 [rootlocalhost ~]# groupadd mysql [rootlocalhost ~]# useradd -r -g mysql -s /bin/false mysql 解压安装包 [rootlocalhost ~]# tar xf mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz -C /usr/local/软连接 [rootlocalh…...

Java 8 中,可以使用 Stream API 和 Comparator 对 List 按照元素对象的时间字段进行倒序排序

文章目录 引言I 示例对象II List 按时间字段倒序排序: 使用 `Stream` 和 `Comparator` 排序方法 1:使用 `Comparator.comparing`方法 2:使用 `Comparator.reversed`方法 3:自定义 `Comparator`输出结果III 注意事项**时间字段类型**:**空值处理**:IV 总结引言 案例:在线用…...

【动手实验】TCP半连接队列、全连接队列实战分析

本文是对 从一次线上问题说起&#xff0c;详解 TCP 半连接队列、全连接队列 这篇文章的实验复现和总结&#xff0c;借此加深对 TCP 半连接队列、全连接队列的理解。 实验环境 两台腾讯云服务器 node2&#xff08;172.19.0.12&#xff09; 和 node3&#xff08;172.19.0.15&am…...

【六祎 - Note】SQL备忘录;DDL,DML,DQL,DCL

SQL备忘录 from to : 点击访问源地址...