python网络爬虫系列(五)——数据提取 jsonpath模块
一、数据提取概述
知识点
- 了解 响应内容的分类
- 了解 xml和html的区别
1. 响应内容的分类
在发送请求获取响应之后,可能存在多种不同类型的响应内容;而且很多时候,我们只需要响应内容中的一部分数据
结构化的响应内容
json字符串
- 可以使用re、json等模块来提取特定数据
- json字符串的例子如下图
xml字符串
可以使用re、lxml等模块来提取特定数据
xml字符串的例子如下
<bookstore> <book category="COOKING"><title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="CHILDREN"><title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="WEB"><title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </bookstore>
非结构化的响应内容
html字符串
- 可以使用re、lxml等模块来提取特定数据
- html字符串的例子如下图
知识点:了解 响应内容的分类
2. 认识xml以及和html的区别
要搞清楚html和xml的区别,首先需要我们来认识xml
2.1 认识xml
xml是一种可扩展标记语言,样子和html很像,功能更专注于对传输和存储数据
<bookstore>
<book category="COOKING"><title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price>
</book>
<book category="CHILDREN"><title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price>
</book>
<book category="WEB"><title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price>
</book>
</bookstore>
上面的xml内容可以表示为下面的树结构:
2.2 xml和html的区别
二者区别如下图
- html:
- 超文本标记语言
- 为了更好的显示数据,侧重点是为了显示
- xml:
- 可扩展标记语言
- 为了传输和存储数据,侧重点是在于数据内容本身
知识点:了解 xml和html的区别
2.3 常用数据解析方法
据,侧重点是为了显示
- xml:
- 可扩展标记语言
- 为了传输和存储数据,侧重点是在于数据内容本身
知识点:了解 xml和html的区别
2.3 常用数据解析方法
二、数据提取-jsonpath模块
知识点
- 了解 jsonpath模块的使用场景
- 掌握 jsonpath模块的使用
1. jsonpath模块的使用场景
如果有一个多层嵌套的复杂字典,想要根据key和下标来批量提取value,这是比较困难的。jsonpath模块就能解决这个痛点,接下来我们就来学习jsonpath模块
jsonpath可以按照key对python字典进行批量数据提取
知识点:了解 jsonpath模块的使用场景
2. jsonpath模块的使用方法
2.1 jsonpath模块的安装
jsonpath是第三方模块,需要额外安装
pip install jsonpath
2.2 jsonpath模块提取数据的方法
from jsonpath import jsonpath
ret = jsonpath(a, 'jsonpath语法规则字符串')
2.3 jsonpath语法规则
2.4 jsonpath使用示例
book_dict = { "store": {"book": [ { "category": "reference","author": "Nigel Rees","title": "Sayings of the Century","price": 8.95},{ "category": "fiction","author": "Evelyn Waugh","title": "Sword of Honour","price": 12.99},{ "category": "fiction","author": "Herman Melville","title": "Moby Dick","isbn": "0-553-21311-3","price": 8.99},{ "category": "fiction","author": "J. R. R. Tolkien","title": "The Lord of the Rings","isbn": "0-395-19395-8","price": 22.99}],"bicycle": {"color": "red","price": 19.95}}
}from jsonpath import jsonpathprint(jsonpath(book_dict, '$..author')) # 如果取不到将返回False # 返回列表,如果取不到将返回False
3. jsonpath练习
我们以拉勾网城市JSON文件 http://www.lagou.com/lbs/getAllCitySearchLabels.json 为例,获取所有城市的名字的列表,并写入文件。
参考代码:
import requests
import jsonpath
import json# 获取拉勾网城市json字符串
url = 'http://www.lagou.com/lbs/getAllCitySearchLabels.json'
headers = {"User-Agent": "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"}
response =requests.get(url, headers=headers)
html_str = response.content.decode()# 把json格式字符串转换成python对象
jsonobj = json.loads(html_str)# 从根节点开始,获取所有key为name的值
citylist = jsonpath.jsonpath(jsonobj,'$..name')# 写入文件
with open('city_name.txt','w') as f:content = json.dumps(citylist, ensure_ascii=False)f.write(content)
知识点:掌握 jsonpath模块的使用
ent = json.dumps(citylist, ensure_ascii=False)
f.write(content)
----##### 知识点:掌握 jsonpath模块的使用----
python网络爬虫系列(五)——数据提取 jsonpath模块相关推荐
- python网络爬虫系列(四)——requests模块
requests模块 知识点: 掌握 headers参数的使用 掌握 发送带参数的请求 掌握 headers中携带cookie 掌握 cookies参数的使用 掌握 cookieJar的转换方法 掌握 ...
- python网络爬虫系列教程_Python网络爬虫系列教程连载 ----长期更新中,敬请关注!...
感谢大家长期对Python爱好者社区的支持,后期Python爱好者社区推出Python网络爬虫系列教程.欢迎大家关注.以下系列教程大纲,欢迎大家补充.视频长期连载更新中 --------------- ...
- python网络爬虫系列(六)——数据提取 lxml模块
一.数据提取-lxml模块 知识点 了解 lxml模块和xpath语法的关系 了解 lxml模块的使用场景 了解 lxml模块的安装 了解 谷歌浏览器xpath helper插件的安装和使用 掌握 x ...
- 实战|手把手教你利用Python网络爬虫获取新房数据
一.项目背景 大家好,我是J哥. 新房数据,对于房地产置业者来说是买房的重要参考依据,对于房地产开发商来说,也是分析竞争对手项目的绝佳途径,对于房地产代理来说,是踩盘前的重要准备. 今天J哥以惠民之家 ...
- python网络爬虫系列教程——python中requests库应用全解
全栈工程师开发手册 (作者:栾鹏) python教程全解 python中requests库的基础应用,网页数据挖掘的常用库之一.也就是说最主要的功能是从网页抓取数据. 使用前需要先联网安装reques ...
- python网络爬虫系列教程——python中pyquery库应用全解
全栈工程师开发手册 (作者:栾鹏) python教程全解 python网络爬虫lxml库的应用全解. 在线安装方法:cmd中输入"pip install pyquery" 离线安装 ...
- python网络爬虫系列教程——python中lxml库应用全解(xpath表达式)
全栈工程师开发手册 (作者:栾鹏) python教程全解 python网络爬虫lxml库的应用全解. 在线安装方法:cmd中输入"pip install lxml" 离线安装,下载 ...
- python网络爬虫系列教程——python网络数据爬虫误区,让你的爬虫更像人类
1 前言 近期,有些朋友问我一些关于如何应对反爬虫的问题.由于好多朋友都在问,因此决定写一篇此类的博客.把我知道的一些方法,分享给大家.博主属于小菜级别,玩爬虫也完全是处于兴趣爱好,如有不足之处,还望 ...
- 【python】——爬虫03 数据提取[jsonpath模块、lxml模块]
目录 一.概述 1. 响应内容分类 2. xml和html 3. 数据解析 二.jsonpath模块 1. 提取数据的方法 2. jsonpath语法规则 3. jsonpath练习:获取拉钩网城市j ...
最新文章
- 审批政策中收入与负债核实
- SQL SERVER 通用分页存储过程
- oracle log.xml分析,Oracle11g 中使用ADRCI 查看alert log文件(xml格式)
- 获取前一天日期(应对跨月取日期问题)
- 北航、商汤提出的网络二值化新算法 IR-Net,到底好使不?
- 严重的“Access:7”供应链漏洞影响100多家厂商150多款联网设备等产品
- Message:Unable to locate element 问题解决方法
- Mysql数据库系统单元压力和性能基准测试
- 如何在IE浏览器中引入本地字体文件
- PMP®考试通过率多少
- 新创建了用户没有计算机图标,w10我的电脑图标没了怎么办
- 自动化搜索ARX密码差分特征的方法
- 计算机本地网络如何共享,本地网络共享如何实现?
- container 和initContainers使用
- 解决系统提示:内存不能为“read”或written的办法
- 绿色电力和教育 化学制品 组合板块推荐的五个横盘整理股票
- 群发邮件平台你知道那个好吗,一款邮件群发100万封群发邮件平台
- 《LeetCode刷题》—121. 买卖股票的最佳时机
- 浅谈USB设备的VID和PID
- C语言练习题-循环练习题
热门文章
- python中列表如何比较大小_如何比较python中的列表/列表?
- xmind可以画流程图吗_新娘妆可以自己画吗?临夏化妆学校告诉你答案!
- Linux 命令之 cut
- Python3生成脚本实现重置键盘键位
- java futuretask 实例_java 使用Callable+FutureTask获取执行结果
- mysql非主键索引_主键索引和非主键索引的区别
- python 重载的实现(single-dispatch generic function)
- Android Ac 控件,Android控件--MultiAutoCompleteTextView
- 使用VS2015编写C/C++开始步骤
- sublime中编译的sass如何改变css输出风格?【这里有答案】