其他
Json文件好帮手——JsonPath
本文作者:戴 雯,中南财经政法大学金融学院
本文编辑:石 艳
技术总编:张馨月
爬虫俱乐部云端课程
从形式上看这是由字典组成的列表,可以看出每个字典里面都是4个键值对,整个列表里有20个字典,对应表格里的20行,每个字典对应的都是一行,网页中的显示效果如下:
二、JsonPath介绍
pip install jsonpath
进行安装。2result = jsonpath(a,'jsonpath语法规则字符串')
③JsonPath的语法规则:
JsonPath | 描述 |
---|---|
$ | 根节点 |
@ | 当前节点 |
. or [] | 取子节点 |
.. | 深层扫描,不管位置,选择所有符合条件的条件 |
* | 通配符,匹配所有的元素节点 |
?() | 支持过滤操作 |
() | 支持表达式计算 |
下面举一个简单的小栗子,一起看看JsonPath究竟是如何提取信息的吧~这是一份有关商店里商品信息的Json文档,主要包括书籍book
和自行车bicycle
两类商品,通过应用JsonPath这个模块,可以提取到我们想要的特定信息。
1import jsonpath
2book_dict = {
3 "store": {
4 "book": [
5 { "category": "reference",
6 "author": "Nigel Rees",
7 "title": "Sayings of the Century",
8 "price": 8.95
9 },
10 { "category": "fiction",
11 "author": "Evelyn Waugh",
12 "title": "Sword of Honour",
13 "price": 12.99
14 },
15 { "category": "fiction",
16 "author": "Herman Melville",
17 "title": "Moby Dick",
18 "isbn": "0-553-21311-3",
19 "price": 8.99
20 },
21 { "category": "fiction",
22 "author": "J. R. R. Tolkien",
23 "title": "The Lord of the Rings",
24 "isbn": "0-395-19395-8",
25 "price": 22.99
26 }
27 ],
28 "bicycle": {
29 "color": "red",
30 "price": 19.95
31 }
32 }
33}
接下来,我们可以结合上面所说的JsonPath语法规则,尝试提取不同内容。值得注意的是,$..
这种字符语法规则表示从任意位置提取,这是我们在提取Json文档时最最常用的一种哦~。
如果想提取store下的所有元素,可以输入如下代码,结果如下:
1jsonpath(book_dict,'$..store') # $..store表示从任意位置提取商店信息
1print(jsonpath(book_dict,'$..author')) # $..author表示从任意位置提取作者信息
1print(jsonpath(book_dict,'$..book[2]')) #提取book中的第三个元素,即第三本书对应的信息
2print(jsonpath(book_dict,'$..book[(@.length-1)]')) #提取book中最后一本书的信息
3print(jsonpath(book_dict,'$..book[0,1]')) #提取book中前两本书的信息
1print(jsonpath(book_dict,'$..book[?(@.isbn)]')) #使用?()过滤有isbn编号的所有书籍
2print(jsonpath(book_dict,'$..book[?(@.price<10)]')) #使用?()过滤价格低于10元的所有书籍
三、实战演练
$..+节点名称
来提取信息,其中$代表查询根元素,..代表深层扫描,代码如下: 1import jsonpath
2import requests
3import pandas as pd
4url = "http://index.dce.com.cn:10000/dce-webapp-indexquote-1.0-RELEASE/indexQuote/kLine?indexCode=pfm001&type=0&v=013303227965216968"
5html = requests.get(url) #, headers = headers
6null = ''
7page = eval(html.text)
8date=jsonpath.jsonpath(page['data'], "$..tradeDate")
9openprice=jsonpath.jsonpath(page['data'], "$..openPrice")
10closeprice=jsonpath.jsonpath(page['data'], "$..closePrice")
11clearprice=jsonpath.jsonpath(page['data'], "$..clearPrice")
12data2 = {'date': date,
13 'close': closeprice,
14 'open': openprice,
15 'clear': clearprice}
16data = pd.DataFrame(data2)
17data
最终得到的结果如下:
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
pyecharts绘图——河流图展示
你知道MDPI期刊的热门题目吗?
文件合并你不行,mergemany来帮宁分组进行描述性统计的小技巧 --astx命令介绍
新年快乐|爬虫俱乐部2020年度总结Python中实现Excel的重复值提取fileexists:告诉你“我”存在吗?工作中一切困难的解决途径——motivatedolly
【爬虫实战】喜茶的门店都开在了哪里?
import delimited | 再也不用担心读入网页源代码“乱七芭蕉”了如何简洁地列出指定属性的变量?ds命令来了!
如何在Python中进行描述性统计分析?
分析师和他们的雇主重视与管理层接触吗?——分析师参与盈余电话会议的研究
繁忙的董事与公司业绩:来自并购的证据使用Python接口读取CSMAR数据列表生成式|让你的代码简洁又美观Stata中变量观测值的亲密伙伴——levelsof命令微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:statatraining@163.com投稿要求:1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。