Python 爬虫学习笔记(七(2))JsonPath解析+实战
一、jsonpath
在PyCharm pip install jsonpath库
jsonpath只能解析本地文件,和xpath不同
基本语法如下图,和xpath对应记忆
以解析下面的json文件为例,存着一些书还有一辆自行车
{ "store": {"book": [{"category": "修真","author": "六道","title": "坏蛋是怎样炼成的","price": 8.95},{"category": "修真","author": "天蚕土豆","title": "斗破苍穹","price": 12.99},{"category": "修真","author": "唐家三少","title": "斗罗大陆","isbn": "0-553-21311-3","price": 18.99},{"category": "修真","author": "南派三叔","title": "星辰变","isbn": "0-395-19395-8","price": 22.99}],"bicycle": {"color": "黑色","price": 19.95}}
}
先打开json文件,将其反序列化
import jsonobj = json.load(open('json_path_解析.json', 'r', encoding='utf-8'))
- 书店所有书的作者
# 书店所有书的作者
author_list = jsonpath.jsonpath(obj, '$.store.book[*].author')
- 所有的作者
# 所有的作者
author_list = jsonpath.jsonpath(obj, '$..author')
- store的所有元素,所有的books和bicycle
# store的所有元素,所有的books和bicycle
store_list = jsonpath.jsonpath(obj, '$.store.')
- store里面所有东西的price
# store里面所有东西的price
price_list = jsonpath.jsonpath(obj, '$.store..price')
- 第n本书,第n-m本书
# 第三本书
book = jsonpath.jsonpath(obj, '$.store..book[2]')# 最后一本书
book = jsonpath.jsonpath(obj, '$.store..book[(@.length-1)]')# 前面的两本书(两个方法)
book_list = jsonpath.jsonpath(obj, '$.store..book[0,1]')
book_list = jsonpath.jsonpath(obj, '$.store..book[:2]')
- 条件过滤:所有的包含isbn的书 / 价格低于10的书
# 所有的包含isbn的书
book_list = jsonpath.jsonpath(obj, '$.store..book[?(@.isbn)]')# 价格低于10的书
book_list = jsonpath.jsonpath(obj, '$.store..book[?(@.price<10)]')
总结如下图,参考博客JSONPath-简单入门
二、jsonpath实战
解析淘票票网站,获取地区名单
直接访问url获取不到内容,说明做了反爬
定制请求头后,打印数据发现结果前面有一个jsonp108,我们需要的是里面的内容,所以过程中还需要做一个简单的切割。
完整代码:
import urllib.request
import jsonpath
import jsonurl = 'https://dianying.taobao.com/cityAction.json?activityId&_ksTS=1647574620570_107&jsoncallback=jsonp108&action=cityAction&n_s=new&event_submit_doGetAllRegion=true'headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ""Chrome/98.0.4758.102 Safari/537.36 ",'referer': 'https://dianying.taobao.com/'
}request = urllib.request.Request(url=url, headers=headers)response = urllib.request.urlopen(request)content = response.read().decode('utf-8')
content = content.split('(')[1].split(')')[0]# jsonpath只能解析本地文件,所以先存入文件
with open('taopiaopiao.json', 'w', encoding='utf-8') as f:f.write(content)# json.load参数必须是一个文件
obj = json.load(open('taopiaopiao.json', 'r', encoding='utf-8'))result = jsonpath.jsonpath(obj, '$.returnValue..regionName')print(result)
总结
- jsonpath只能解析本地文件
- 条件过滤要用?(),例如book[?(@.price<10)]
- [@.length-1]代表最后一个元素 [*]代表所有
Python 爬虫学习笔记(七(2))JsonPath解析+实战相关推荐
- python爬虫学习笔记(三)——淘宝商品比价实战(爬取成功)
2020年最新淘宝商品比价定向爬取 功能描述 目标:获取淘宝搜索页面的信息,提取其中的商品名称和价格. 理解:淘宝的搜索接口 翻页的处理 技术路线:requests re 程序的结 ...
- Python爬虫学习笔记 -- 爬取糗事百科
Python爬虫学习笔记 -- 爬取糗事百科 代码存放地址: https://github.com/xyls2011/python/tree/master/qiushibaike 爬取网址:https ...
- python爬虫学习笔记3.2-urllib和request练习
python爬虫学习笔记3.2-urllib和request练习 一.urllib练习 1.百度贴吧案例 需求 分析 手动测试查询流程 观察页面 分析特殊部分 https://tieba.baidu. ...
- python爬虫学习笔记 1.9 (Handler处理器 和 自定义Opener)
python爬虫学习笔记 1.1(通用爬虫和聚焦爬虫) python爬虫学习笔记 1.2 ( HTTP和HTTPS ) python爬虫学习笔记 1.3 str和bytes的区别 python爬虫学习 ...
- python爬虫学习笔记 3.9 (了解参考:训练Tesseract)
python爬虫学习笔记 3.9 (了解参考:训练Tesseract) 参考阅读:训练Tesseract 要使用 Tesseract 的功能,比如后面的示例中训练程序识别字母,要先在系统中设置一 个新 ...
- python爬虫学习笔记2模拟登录与数据库
前言 为了加入学校里面一个技术小组,我接受了写一个爬取学校网站通知公告的任务.这个任务比以前写的爬虫更难的地方在于,需要模拟登录才能获得页面,以及将得到的数据存入数据库. 本文按照日期来记录我完成任务 ...
- Python爬虫学习笔记总结(一)
〇. python 基础 先放上python 3 的官方文档:https://docs.python.org/3/ (看文档是个好习惯) 关于python 3 基础语法方面的东西,网上有很多,大家可以 ...
- 一入爬虫深似海,总结python爬虫学习笔记!
正文 〇. python 基础 先放上python 3 的官方文档:https://docs.python.org/3/ (看文档是个好习惯) 关于python 3 基础语法方面的东西,网上有很多,大 ...
- 一入爬虫深似海,总结python爬虫学习笔记! 1
正文 〇. python 基础 先放上python 3 的官方文档:https://docs.python.org/3/ (看文档是个好习惯) 关于python 3 基础语法方面的东西,网上有很多,大 ...
- python爬虫学习笔记一:网络爬虫入门
参考书目 <python网络爬虫从入门到实践>唐松 第一章 网络爬虫入门 1.1 robots协议 举例:查看京东的robots协议 京东robots协议地址 User-agent: * ...
最新文章
- ASP.NET的Cookie跨域问题
- 100多年了,左右大脑的不对称性依然备受关注
- php程序是如何运行,如何第一次运行PHP程序?
- 跳表(SkipList)设计与实现(java)
- 远程Linux主机安装zsh插件zsh-syntax-highlighting
- MVC架构 -- 初学试水选课管理系统
- Log4j 第三次发布漏洞补丁,漏洞或将长存
- 09-03 Java 抽象类
- flask-mail异步发送邮件_Python爬虫系列:用邮件来通知爬虫异常状况
- 如何让mysql配置文件生效_mysql配置文件生效测试
- 使用ARGV在命令行里接收参数
- SpringMVC Java config freemarker
- 何以笙箫默,一部有剧情的创意广告集?
- 网络综合布线线缆如何敷设布放_网络综合布线知识点
- AI(Adobe illustrator)修改所有字体
- 软件需求功能测试用例,软件测试用例与需求的对应关系
- css数字怎么换行,css实现连续的英文或数字自动换行的方法
- 厦大计算机 专硕 分数线,厦门大学2020年专硕复试分数线
- 企业要如何利用360评估法做好人才盘点?
- 人工智能和计算机程序有什么区别,人工智能和机器学习之间有什么区别?