Python从入门到网络爬虫(JSON详解)

前言

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。和XML相比,JSON更加简洁和易于读写,同时也更加易于解析和生成。JSON的基本数据类型包括字符串、数字、布尔、null以及数组和对象两种复合类型。各种编程语言都可以很方便地生成和解析JSON数据。

Python中内置了一个JSON模块,可以很方便地进行JSON数据的生成和解析。该模块包括四个函数:dumps、dump、loads和load,分别用于将Python对象转换为JSON格式的字符串、将Python对象转换为JSON格式并存储到一个文件中、将JSON字符串转换为Python对象和将JSON格式的文件读取并转换为Python对象。

json库是处理JSON格式的Python标准库,json库主要包括两类函数:操作函数和解析函数。

(1)操作函数:主要完成外部JSON格式和程序内部数据类型之间的转换功能。

(2)解析函数:主要用于解析键值对内容

(3)json格式包括对象和数组,用大括号{}和方括号[]表示,分别对应键值对的组合关系和对等关系,使用json库时需要注意json格式的“对象”和"数组"概念与Python语言中"字典"和"列表"的区别于联系。

(4)一般来说,JSON格式的对象将被json库解析为字典,JSON格式的数组将被解析为列表。

json包含两个过程,那就是编码和解码。编码是将Python数据类型变换成JSON格式,解码是从JSON格式中解析数据对应到Python数据类型的过程。 

四个常用方法总结:

dump( )将Python对象转换为JSON格式并存储到一个文件中
dumps( )将Python对象转换为JSON格式的字符串
load( )将JSON字符串转换为Python对象
loads( )将JSON格式的文件读取并转换为Python对象

1. 将Python对象转换为json字符串 

import jsondata = [{'hive': 1, 'hadoop': 2, 'hbase': 3, 'flink': 4, 'ambari': 5}]
print("data数据类型: ", type(data))# 将一个Python数据类型列表进行json格式的编码
data2 = json.dumps(data)
print("data2数据类型: ", type(data2))
print(data2)
jsonStr = json.dumps(arr)

2. 将Python对象转换为json数据并保存到文件中

使用dump方法可以将Python的字典对象转为json数据后并输出到文件中,下面代码实现读取Excel文件,并将读取的数据转换为json数据并保存到json文件中 

import xlrd
import jsonworkbook = xlrd.open_workbook("E:\\studyproject\\python\\Excel数据读取\\费县摸排数据\\水源地.xls")worksheet = workbook.sheet_by_name('Sheet1')# 获取所有行数和列数
rows = worksheet.nrows
cols = worksheet.ncolsarr = []
for row in range(rows):obj = {}for col in range(cols):obj[worksheet.cell_value(0, col)] = worksheet.cell_value(row, col)arr.append(obj)fp = open('geo.json','w',encoding='utf-8')
jsonStr = json.dumps(arr)
json.dump(arr,fp,ensure_ascii=False)

注意:导出json文件是,json数据中文编码为unicode问题,这个时候需要在open()时设置encoding='utf-8‘参数,在dump方法中传入参数ensure_ascii=False 

3. 将json字符串序列化为Python对象

使用Python进行接口数据爬取时,接口经常返回json数据格式,下面的代码示例中使用loads()函数将Python爬取今日头条文章列表接口返回的json数据转换为Python对象,并保存到数据库中。

# 浏览器自动化工具
from selenium import webdriver
from selenium.webdriver.common.by import By
# 时间工具
from time import sleep
from time import time
# 网络请求工具
import requests
# JSON解析工具
import json
# 数据库链接工具
import pymysql
# re库
import re# 创建一个浏览器实例
#browser = webdriver.Chrome() #谷歌
browser = webdriver.Firefox()# 获取请求地址
browser.get("file:///E:/studyproject/python/toutiao/getSig.html")#链接MySQL
mysqlCon = pymysql.connect(host="127.0.0.1",port=3306,user="root",password="123456",database="toutiao"
)
# 匹配模版
matchTemplate = ""sleep(10)while True:# 自动化获取js代码计算的sig数据值sigTag = browser.find_element(By.ID,"sigUrl")url = sigTag.textheaders = {# 设置User-Agent,模拟浏览器发送请求'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36',# 设置Cookie,用于身份验证或其他需要的信息'Cookie': '__ac_signature=_02B4Z6wo00f01Lz3yHgAAIDB3.0IExdN.9i818zAAEpR33;tt_webid=7309719685489198604;ttcid=fb73866ceb7a44cdb848344abfc11b6364;s_v_web_id=verify_lpur8vrr_aKDsfWBn_AThk_4UlU_8RpK_Ci9lGCzIBKbb; _ga=GA1.1.1051493470.1701926754; local_city_cache=%E4%B8%B4%E6%B2%82; csrftoken=4561fa578aa7c7bc7d3ac8f87ac7fad1; __feed_out_channel_key=entertainment; passport_csrf_token=a296ea89de4f632e00534cd16812d593; passport_csrf_token_default=a296ea89de4f632e00534cd16812d593; msToken=Lhx7DAYTtQJiiCVIVmYNqtpQkUVKq8RzEzhUZAslgKw_w5gJ_vSlmCJKsQoQUyXXoJzHhluRQFpfceUoT2n2IoACypVJ-aD7RCuXC7iI; tt_scid=0lfkb7lPohYDsWmjDuFAe7L3oLDo0KsbKzlhKzl1CQ2im2TQypCzPCKr.jkBHxexd641; ttwid=1%7CVPO9aK7JwsvyYUFWA3MR5i_pw1b4nic0TD5-jp-zjVc%7C1702450449%7C067c9bd8be4c0a21dc4e60bc225ee29072184eeb24503d5d6cc26b9554d20d26; _ga_QEHZPBE5HH=GS1.1.1702455638.13.0.1702455638.0.0.0.0.0'}# 请求接口获取json数据res = requests.get(url,headers=headers)json_obj = json.loads(res.text)# 通过遍历每条数据,过滤热门文章for item in json_obj['data']:# 计算文章分享数量shareCount = item['share_info']['share_type']['pyq']+item['share_info']['share_type']['qq']+item['share_info']['share_type']['qzone']+item['share_info']['share_type']['wx']imageList = ""# 判断文章路径是否是站内文章路径if re.match(matchTemplate,item['article_url']):# 多条件判断是否是较新的热门文章if item['read_count'] >= 3000:# 创建游标对象cursor = mysqlCon.cursor()# 执行 SQL 查询语句cursor.execute("select * from happy where item_id ="+item['item_id'])# 获取查询结果result = cursor.fetchall()# 判断是否已经插入if len(result) == 0:# 将热门文章保存到数据库sql = "insert into happy (id,item_id,title,abstract,publish_time,like_count,read_count,comment_count,share_count,image_list,article_url,gather_time,transport_time,source) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"values = (None,item['item_id'],item['title'],item['Abstract'],item['publish_time'],item['like_count'],item['read_count'],item['comment_count'],shareCount,imageList,item['article_url'],time(),0,"toutiao")cursor.execute(sql,values)mysqlCon.commit()else:print("已经存在")# 固定时间获取一次url地址sleep(180)# 关闭数据库链接
# cursor.close()
# mysqlCon.close()sleep(5)
browser.quit()

4. 将json文件序列化为Python对象

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

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

相关文章

深度学习 常考简答题--[HBU]期末复习

目录 1.为什么要引用非线性激活函数? 2.什么是超参数?如何优化超参数? 3.线性回归通常使用平方损失函数,能否使用交叉熵损失函数? 4.平方损失函数为何不适用于解决分类问题?(和第3题一块复习) ​编辑 …

新年新风貌 苏州金龙蔚蓝公交护航高贸区“效率巴士”!

1月4日,由苏州市公交集团园区公司与园区高贸区管委会联合推出的4条“高贸区效率巴士”正式开行,这四条线路惠及包括苏州群策科技有限公司、荣旗工业科技有限公司等在内的20余家高贸区重点企业。线路开行5天来,效率巴士让不少企业员工感受到了…

开发者与下雨天:一种独特的情感联结

在科技行业中,开发者是一个独特的群体,他们以逻辑严密的思维和对技术的执着追求为世界编织出无数精彩的数字画卷。而在日常生活中,一个常被提起的现象是许多开发者似乎对下雨天有着特别的喜爱。本文旨在探讨这种现象背后可能存在的心理、生理…

电口模块SFP-GE-T:实现光口与电口之间的转换

电口模块是一种用于实现光口转电口功能的设备,在网络通信中起到重要作用。电口模块没有光电转换的过程,只是传输电信号。本文介绍电口模块的作用、分类、以及使用方法。 一、什么是电口模块 电口模块又被称为光转电模块,它是一种支持热插拔…

LeetCode——447. 回旋镖的数量

大佬,牛!!! 题目:给你一个n*2的数组,表示n个点。然后让你从中选择三个点i,j,k,使得i到j和i到k的欧氏距离相等。问一共有多少种情况。需要注意的是,假设i,j,k是满足条件的&#xff0…

学校服务器安装anaconda并配置pytorch环境

学校服务器安装anaconda并配置pytorch环境 1.下载Anaconda2.传到xftp中3.在终端运行脚本命令4.安装pytorch4.1 查看cuda版本4.2 创建自己的环境4.3 下载pytorch4.4 验证pytorch是否安装成功 参考视频:远程服务器安装anaconda并配置pytorch环境 使用服务器运行项目&a…

软件测试大作业||测试计划+测试用例+性能用例+自动化用例+测试报告

xxx学院 2023—2024 学年度第二学期期末考试 《软件测试》(A)试题(开卷) 题目:以某一 web 系统为测试对象,完成以下文档的编写: (满分 100 分) (1&am…

简单易懂的理解 PyTorch 中 Transformer 组件

目录 torch.nn子模块transformer详解 nn.Transformer Transformer 类描述 Transformer 类的功能和作用 Transformer 类的参数 forward 方法 参数 输出 示例代码 注意事项 nn.TransformerEncoder TransformerEncoder 类描述 TransformerEncoder 类的功能和作用 Tr…

普中STM32-PZ6806L开发板(有点悲伤的故事)

简介 关于我使用 普中STM32-PZ6806L做了做了一些实验, 不小心输入12V,导致核心板等被烧坏, 为了利用电路和资源, 搭建了STM32F103CBT6并使用普中STM32-PZ6806L上面没有烧坏的模块的故事。 普中STM32-PZ6806L开发板 这块的STM32F103ZET6部分算是Closed了, 不准备换核…

docker compose 搭建ES集群的详细步骤,并去掉验证,使用http访问

要使用 Docker Compose 搭建一个 Elasticsearch 集群,并配置为不使用验证,同时使用 HTTP 访问,你可以遵循以下步骤: 步骤 1: 安装 Docker 和 Docker Compose 确保你的系统上已安装 Docker 和 Docker Compose。如果尚未安装&…

freertos——任务通知知识总结与任务通知模拟及信号量实验、消息邮箱实验、事件标志组实验

1.任务通知概念 任务通知:用来通知任务的,任务控制块中的结构体成员变量 ulNotifiedValue就是这个通知值,不需要另外创建一个结构体可以直接接受别人发过来的通知 2.任务通知的优势及劣势 任务通知的优势: 效率更高 &#xff…

Hive基础知识(四):Hive 元数据配置到 MySQL

1. 拷贝驱动 将 MySQL 的 JDBC 驱动拷贝到 Hive 的 lib 目录下 [zzdqhadoop100 software]$ cp /home/atguigu/mysql-connector-java-5.1.37.jar $HIVE_HOME/lib 2. 配置 Metastore 到 MySQL 1)在$HIVE_HOME/conf 目录下新建 hive-site.xml 文件 [zzdqhadoop100 s…

DevExpress历史安装文件包集合

Components - DevExpress.NET组件安装包此安装程序包括所有 .NET Framework、.NET Core 3 和 .NET 5、ASP.NET Core 和 HTML/JavaScript 组件和库(Web和桌面应用程序开发只需要安装此文件即可)。 注意:自DevExpress21.1版本之后,该…

Python 动态变量名称的使用

Python 动态变量名称的使用 引言正文 引言 今天遇到了一个问题,那就是如何在 Python 中使用动态变量名称。那么为什么会想要使用动态变量名称呢?比如,我们有五个对象,分别为: rectangle1 rectangle2 rectangle3 rectangle4 rect…

Altium Designer实用系列(六)----AD问题整理,持续更新......

本篇博客会对粉丝提出的问题进行整理汇总,博客会持续更新… 一、 问题描述 问题1: 为什么我的ad点击设计之后没有update pcb document 原因:由于在工程中只有schDoc文件,没有PcbDoc,而导致没有“设计”–>update …

TypeScript 和 jsdom 库创建爬虫程序示例

TypeScript 简介 TypeScript 是一种由微软开发的自由和开源的编程语言。它是 JavaScript 的一个超集,可以编译生成纯 JavaScript 代码。TypeScript 增加了可选的静态类型和针对对象的编程功能,使得开发更加大规模的应用容易。 jsdom 简介 jsdom 是一个…

oracle 19c容器数据库数据加载和传输-----SQL*Loader(一)

目录 数据加载 (一)控制文件加载 1.创建用户执行sqlldr 2.创建文本文件和控制文件 3.查看表数据 4.查看log文件 (二)快捷方式加载 1.system用户执行 2.查看表数据 3.查看log文件 外部表 数据加载和传输的工具&#xff1…

【docker】centos7安装harbor

目录 零、前提一、下载离线包二、安装三、访问四、开机自启 零、前提 1.前提是已经安装了docker和docker-compose 一、下载离线包 1. csdn资源:harbor-offline-installer-v2.10.0.tgz 2. 百度云盘(提取码:ap3t):harbo…

彻底卸载Microsoft Edge的几种方法

在Windows 10或更高版本的操作系统中,由于Microsoft Edge浏览器与系统深度集成,常规的卸载方法有时可能无法完全移除。然而,你可以尝试以下步骤来尽可能彻底地卸载Microsoft Edge: 方法1:通过设置应用卸载Microsoft Ed…

2023三星齐发,博客之星、华为OD、Java学习星球

大家好,我是哪吒。 一、回顾2023 2023年,华为OD成了我的主旋律,一共发布了561篇文章,其中包含 368篇华为OD机试的文章;100篇Java基础的文章40多篇MongoDB、Redis的文章;30多篇数据库的文章;2…