广州番禺Python, Java小班周末班培训
薯条老师在广州做Python和Java的小班培训,一个班最多10人,学员的平均就业薪资有11K。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Python机器学习,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6
3.3.1数据交换格式:JSON
JSON是一种很轻量的数据交换格式,全称为JavaScript Object Notation,采用完全独立于编程语言的文本格式来存储和表示数据,其结构简洁,层次清晰,易于阅读编写,同时也易于机器解析和生成,这些特性使得JSON 成为理想的数据交换语言。
HTTP服务器响应的数据不一定是HTML文件,某些接口会响应JSON格式的数据,这也是为什么爬虫初学者要学习JSON的原因。
3.3.2 JSON数据格式
JSON数据格式的核心是键值对,类似于Python中的字典结构,但与字典结构不同的是,JSON中的键类型必须是字符串类型,键名用双引号括起来。在JSON标准中,规定了键名得使用双引号括起来,使用单引号时可能会带来一些兼容性的问题,所以最佳做法是遵循标准,采用双引号。JSON格式中的键名必须为字符串类型,键值可以为以下六种类型:
键值类型 | 描述 |
number | 数值类型,比如整型或浮点类型 |
string | 字符串,值为字符串时,需用双引号括起来 |
boolean | 布尔类型,值为true或false,同Python中的True和False |
array | 这里的数组类似于Python中的列表,元素被包含在方括号[]中,元素类型必须一致 |
object | json格式用{}表示一个对象。对象的语法类似于Python中的字典结构,只不过对象中的键名亦必须是字符串类型 |
null | 类似于Python中的None值 |
数值类型举例:
{"age": 18}
字符串类型举例:
{"author": "薯条老师"}
布尔类型举例:
{"keep_hungry": true}
数组类型举例:
{"students": ["阿占", "鹏子", "小梁", "毛同学"]}
对象类型举例:
{"book": {"id": 0, "title": "遇见python", "author": "薯条社区"}}
null值举例:
{"price": null}
在JSON格式中,键值的数据类型可以相互嵌套,比如在数组类型中嵌套对象类型,在对象中嵌套数组类型,如此组合成比较复杂的json格式。复杂的json格式举例:
{ "book":{ id": 0, "title": "遇见python", "author": {"name": "薯条老师", "age": 18}, "contributor": [{"name": "阿月"},{"name": "上官玛利亚"} ] } }
3.3.3 使用json模块处理JSON
Python中的内置模块json主要包含以下四方法:
常用方法 | 描述 |
json.dumps(obj) | 将可序列化对象obj序列化为json字符串 |
json.loads(s) | 将json字符串s反序列化为Python对象 |
json.dump(obj, fp) | 将可序列化对象直接写入到fp文件流对象所指向的文件中 |
json.load(fp) | 将fp文件流对象所对应的文件数据反序列化为Python对象 |
json.dumps方法用来将Python中的可序列化对象转换为json字符串,Python中可序列化的数据类型:
可序列化对象 | 描述 |
简单数据类型 | 整型,浮点类型,布尔类型 |
复合数据类型 | 字符串,列表,元组,字典 |
json.dumps方法默认的字符编码为ascii,可以指定形参ensure_ascii的值为False来关闭默认编码选项。
现在通过github提供的数据抓取接口来掌握json模块的用法。github API的详细用法可参考官方文档:https://docs.github.com/en/rest。以下为抓取C++语言类项目仓库数据的URL:
https://api.github.com/search/repositories?q=language:c++&page=1
URL中的query为q=language:c++&page=1,表示抓取第一页的基于c++语言的项目仓库数据。如需抓取抓取第一页的Python语言的项目仓库数据,那么URL为:
https://api.github.com/search/repositories?q=language:python&page=1
将该URL复制下来,粘贴到浏览器的地址栏,并按下回车键,可在页面中看到服务器响应的数据:
薯条老师使用的是火狐浏览器,从页面的JSON标记可知,github API响应的是JSON数据。该JSON中的"items"键对应的是一个数组,数组中的每一项为一个对象,保存了项目仓库的信息。现在通过Python代码来写一个简单的爬虫程序,爬取github项目仓库的数据。
代码实例-爬取github的Python仓库数据
# 导入内置模块json import json # urllib下的request,用来发起HTTP请求 import urllib.request # url为获取github中的第一页Python项目数据的请求url url = ' with urllib.request.urlopen(url) as response: # response对象的read方法返回的是一个字节流对象,需通过decode方法进行解码 # 解码后的对象是一个JSON格式的字符串 json_str = response.read().decode('utf-8') # 执行json模块的loads方法对JSON字符串进行反序列化 repositories = json.loads(json_str) # 输出第一个Python仓库的信息 print(repositories["items"][0])
3.3.4 使用jsonpath提取JSON数据
通过json模块的loads方法将JSON数据反序列化为Python对象以后,就可以提取出指定字段的数据。但在实际情况中,需要同时提取多个字段的数据时,使用json模块还是较为不便的,此时可以使用第三方模块jsonpath。
初学者现在只需熟练掌握json模块的用法。将学过的知识反复练习至熟练掌握的程度,彻底吸收巩固,再作进一步的学习,即是最好的学习方法。
3.3.5 知识要点
(1) JSON是一种很轻量的数据交换格式,全称为JavaScript Object Notation
(2) HTTP服务器响应的数据不一定是HTML文件,某些接口会响应JSON格式的数据
(3) Python提供了内置模块json,用来对JSON数据进行处理
3.3.6 最具实力的小班培训
薯条老师在广州做Python和Java的小班培训,一个班最多10人。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。打算参加小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。
(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,包拿Offer
(3) 数据分析高薪就业班,月薪11K-15K, 免费领取课程大纲
(4) Python大数据挖掘,量化投资就业班,月薪12K-25K,免费领取课程大纲
扫码免费领取Python学习资料:
已有4位薯条发表了看法:
访客 评论于 2022-05-06 10:31:40 回复
您好,发现了一点小瑕疵:
URL中的query为q=language:c++&page=1,表示抓取第一页的基于c++语言的项目仓库数据。如需抓取抓取第一页的Python语言的项目仓库数据,那么URL为:
https://api.github.com/search/repositories?q=python:python&page=1
URL貌似有误,q=python:python应该为q=language:python
薯条老师 评论于 2023-01-05 17:42:03 回复
感谢,已更正
访客 评论于 2022-08-08 09:14:59 回复
不是使用requests库更方便咩,为啥还要使用urllib丫
薯条老师 评论于 2023-01-05 17:41:30 回复
后面会详细讲解requests