爬虫系列之【数据解析之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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/27247.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FastExcel vs EasyExcel vs Apache POI:三者的全面对比分析

一、核心定位与历史沿革 Apache POI(1990s-) 作为Java生态中最古老的Excel处理库,提供对.xls/.xlsx文件的全功能支持。其核心价值在于对Excel规范的完整实现,包括单元格样式、公式计算、图表操作等深度功能。但存在内存消耗大&…

创建一个MCP服务器,并在Cline中使用,增强自定义功能。

MCP介绍 MCP 是一个开放协议,它标准化了应用程序如何向LLMs提供上下文。可以将 MCP 视为 AI 应用程序的 USB-C 端口。正如 USB-C 提供了一种标准化的方法来将您的设备连接到各种外围设备和配件一样,MCP 提供了一种标准化的方法来将 AI 模型连接到不同的…

【计算机网络入门】初学计算机网络(七)

目录 1. 滑动窗口机制 2. 停止等待协议(S-W) 2.1 滑动窗口机制 2.2 确认机制 2.3 重传机制 2.4 为什么要给帧编号 3. 后退N帧协议(GBN) 3.1 滑动窗口机制 3.2 确认机制 3.3 重传机制 4. 选择重传协议(SR&a…

[Windows] 免费电脑控制手机软件 极限投屏_正式版_3.0.1 (QtScrcpy作者开发)

[Windows] 极限投屏_正式版 链接:https://pan.xunlei.com/s/VOKJf8Z1u5z-cHcTsRpSd89tA1?pwdu5ub# 新增功能(Future): 支持安卓14(Supports Android 14)提高投屏成功率(Improve the success rate of mirror)加快投屏速度(Accelerate screen mirrorin…

阿里云 | 快速在网站上增加一个AI助手

创建智能体应用 如上所示,登录阿里云百炼人工智能业务控制台,创建智能体应用,智能体应用是一个agent,即提供个人或者企业的代理或中间件组件应用,对接阿里云大模型公共平台,为个人或者企业用户提供大模型应…

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

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

如何在Python用Plot画出一个简单的机器人模型

如何在Python中使用 Plot 画出一个简单的模型 在下面的程序中,首先要知道机器人的DH参数,然后计算出每一个关节的位置,最后利用 plot 函数画出关节之间的连杆就可以了,最后利用 animation 库来实现一个动画效果。 import matplo…

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

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

大摩闭门会:250228 学习总结报告

如果图片分辨率不足,可右键图片在新标签打开图片或者下载末尾源文件进行查看 本文只是针对视频做相应学术记录,进行学习讨论使用

【Docker】使用Docker搭建-MySQL数据库服务

零、更换Docker镜像源 因为国内现在封锁了Docker默认拉取镜像的站点(DockerHub),而且国内大部分Docker镜像站已全部下线,导致现在很多朋友在拉取镜像的时候会出现无法拉取的现象,这时候就需要进行更换Docker镜像源。 可…

商米科技前端工程师(base上海)内推

1.根据原型或高保真设计,开发web、H5、小程序等类型的前端应用; 2.在指导下,高质量完成功能模块的开发,并负责各功能模块接口设计工作; 3.负责产品及相关支撑系统的开发及维护工作,不断的优化升级&#x…

如何在docker中的mysql容器内执行命令与执行SQL文件

通过 docker ps -a 查询当前运行的容器,找到想执行命令的容器名称。 docker ps -a若想执行sql文件,则将sql文件放入当前文件夹下后将项目内的 SQL 文件拷贝到 mysql 容器内部的 root下。 sudo docker cp /root/enterprise.sql mysql:/root/然后进入 my…

【2025年2月28日稳定版】小米路由器4C刷机Immortalwrt 23.05.4系统搭载mentohust 0.3.1插件全记录

小米路由器4C刷机Immortalwrt系统搭载mentohust插件全记录 首先将路由器按住后面的reset,用一个针插进去然后等待5s左右,松开,即可重置路由器。 然后要用物理网线物理连接路由器Lan口和电脑,并将路由器WAN口连接至网口。确保电脑…

7.1.2 计算机网络的分类

文章目录 分布范围交换方式 分布范围 计算机网络按照分布范围可分为局域网、广域网、城域网。局域网的范围在10m~1km,例如校园网,网速高,主要用于共享网络资源,拓扑结构简单,约束少。广域网的范围在100km,例…

Linux——进程池

前言:大佬写博客给别人看,菜鸟写博客给自己看,我是菜鸟。 1.实现思路 思路:通过创建匿名管道,来实现父子进程之间的通信 注1:父写,子读 注2:匿名管道只能用来进行具有血管关系的进程…

北京大学DeepSeek与AIGC应用(PDF无套路下载)

近年来,人工智能技术飞速发展,尤其是大模型和生成式AI(AIGC)的突破,正在重塑各行各业的生产方式与创新路径。 北京大学联合DeepSeek团队推出的内部研讨教程《DeepSeek与AIGC应用》,以通俗易懂的方式系统解…

解锁 indexOf、substring 和 JSON.stringify:从小程序图片上传看字符串魔法 ✨

🌟 解锁 indexOf、substring 和 JSON.stringify:从小程序图片上传看字符串魔法 ✨ 在 JavaScript 中,字符串操作和数据序列化是开发中不可或缺的技能。indexOf、substring 和 JSON.stringify 是三个简单却强大的工具,分别用于定位…

DeepSeek + 自由职业 发现新大陆,从 0 到 1 全流程跑通商业 IP

DeepSeek 自由职业 发现新大陆,从 0 到 1 全流程跑通商业 IP 商业定位1. 商业定位分析提示词2. 私域引流策略提示词3. 变现模型计算器提示词4. 对标账号分析提示词5. 商业IP人设打造提示词6. 内容选题策略提示词7. 用户人群链分析提示词8. 内容布局与转化路径设计提…

项目准备(flask+pyhon+MachineLearning)- 3

目录 1.商品信息 2. 商品销售预测 2.1 机器学习 2.2 预测功能 3. 模型评估 1.商品信息 app.route(/products) def products():"""商品分析页面"""data load_data()# 计算当前期间和上期间current_period data[data[成交时间] > data[成…

【MySQL】(2) 库的操作

SQL 关键字,大小写不敏感。 一、查询数据库 show databases; 注意加分号,才算一句结束。 二、创建数据库 {} 表示必选项,[] 表示可选项,| 表示任选其一。 示例:建议加上 if not exists 选项。 三、字符集编码和排序…