python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)


Posted in Python onApril 18, 2019

简介

有些 post 的请求参数是 json 格式的,这个前面发送post 请求里面提到过,需要导入 json模块处理。现在企业公司一般常见的接口因为json数据容易处理,所以绝大多数返回数据也是 json 格式的,我们在做判断时候,往往只需要提取其中

几个关键的参数就行,这时候我们就需要 json 来解析返回的数据了。首先来说一下笔者为何要单独写这么一篇,原因是:python 里面 bool 值是 True 和 False,json 里面 bool 值是 true和 false,并且区分大小写,这就尴尬了,明明都是 bool 值。

在python里面写的代码,传到json里,不用说肯定识别不了,所以需要把python的代码经过encode后成为 json 可识别的数据类型,反之json数据就需要decode后成为python代码可识别的数据类型。这个也是需要初学者注意,也算是个细微差和

一个坑人的地方吧,如果不注意很容易掉坑里啊。笔者就掉进去过,还好自救能力强,爬出来了,所以为了警醒后来者,就有了这篇随笔。

json 模块简介

1、Json 简介:Json,全名 JavaScript Object Notation,JSON(JavaScript Object Notation(记号、标记))是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。JSON采用完全独立

于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。JSON易于人阅读和编写,同时也易于机器解析和生成。常用于 http 请求中,接口

返回的数据中。

2、可以用 help(json),查看对应的源码注释内容

python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)

编码Encode(python->json)

1、为什么要 encode,笔者在开头就给各位小伙伴开门见山的说出来了,让各位带着问题来探索、来学习、来思考

2、举个简单例子,下图的实例中 dict 类型经过 json.dumps()后变成 str,True 变成了 true,False变成了 fasle

python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)

3、从json模块的对应源码中可以查看到,python 数据转化成 json可识别的数据,对应的表关系如下

python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)

解码 decode(json->python)

1、以博客园的登录成功结果:{"success":True}为例,我们其实最想知道的是 success 这个字段返回的是 True 还是 False,以便于我们对接口进行断言,以下是fiddler抓包博客园登录成功的结果

python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)

2、如果以 content 字节输出,返回的是一个字符串:{"success":true},这样获取后面那个结果就不方便了,导致断言也不方便

3、如果经过 json 解码后,返回的就是一个字典:{u'success': True},这样获取后面那个结果,就用字典的方式去取值:result2["success"],这样不言而喻断言也就简单方便了

4、由于博客园的登录机制的改变,我们这里接着上一篇的删除随笔的返回结果,给小伙伴们实战演练一下

5、用fiddler抓包,抓到删除新建随笔的请求,从抓包结果可以看出,返回结果是一个字符串:{"isSuccess":True},按照上边的步骤用代码实现

python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)

6、代码及结果(看到了吧,就是这么轻松被我们取到其value了,接下来就可以进行断言了)

python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)

7、从json模块的对应源码中可以查看到, json 数据转化成 python 可识别的数据,对应的表关系如下

python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)

8、参考代码

# coding:utf-8
import requests
# 先打开登录首页,获取部分cookie
url = "https://passport.cnblogs.com/user/signin"
headers = {
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0"
      } # get方法其它加个ser-Agent就可以了
s = requests.session()
r = s.get(url, headers=headers,verify=False)
print (s.cookies)
# 添加登录需要的两个cookie
c = requests.cookies.RequestsCookieJar()
c.set('.CNBlogsCookie', 'XXX') # 填上面抓包内容
c.set('.Cnblogs.AspNetCore.Cookies','XXX') # 填上面抓包内容
c.set('AlwaysCreateItemsAsActive',"True")
c.set('AdminCookieAlwaysExpandAdvanced',"True")
s.cookies.update(c)
print (s.cookies)
result = r.content
print(result.decode('utf-8'))
# 登录成功后保存编辑内容
url2= "https://i.cnblogs.com/EditPosts.aspx?opt=1"
body = {"__VIEWSTATE": "",
    "__VIEWSTATEGENERATOR":"FE27D343",
    "Editor$Edit$txbTitle":"这是绕过登录的标题:北京-宏哥",
    "Editor$Edit$EditorBody":"<p>这里是中文内容:http://www.cnblogs.com/duhong/</p>",
    "Editor$Edit$Advanced$ckbPublished":"on",
    "Editor$Edit$Advanced$chkDisplayHomePage":"on",
    "Editor$Edit$Advanced$chkComments":"on",
    "Editor$Edit$Advanced$chkMainSyndication":"on",
    "Editor$Edit$lkbDraft":"存为草稿",
     }
r2 = s.post(url2, data=body, verify=False)
print (r.content.decode('utf-8'))

# 第三步:正则提取需要的参数值
import re
postid = re.findall(r"postid=(.+?)&", r2.url)
print(type(postid))
print (postid) # 这里是 list
# 提取为字符串
print (postid[0])
# 第四步:删除草稿箱
url3 = "https://i.cnblogs.com/post/delete"
json3 = {"postId": postid[0]}
r3 = s.post(url3, json=json3, verify=False)
result = r3.content #content数据是字节输出
print(type(result))
print(result)
#json是经过加码encode成对应python的数据类型
result1 = r3.json()
print (type(result1))
print(result1['isSuccess'])

小结

在实际工作中遇到问题要学会查资料,看其对应的官方文档以及源码,不仅可以起到事半功倍的作用,也可以锻炼自己解决问题的能力。这一点笔者深有体会!!!

以上所述是小编给大家介绍的python Json 数据处理详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
利用Python中unittest实现简单的单元测试实例详解
Jan 09 Python
利用python打印出菱形、三角形以及矩形的方法实例
Aug 08 Python
python3.x上post发送json数据
Mar 04 Python
Python3中bytes类型转换为str类型
Sep 27 Python
python opencv实现图像边缘检测
Apr 29 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
Jun 25 Python
Python中的正则表达式与JSON数据交换格式
Jul 03 Python
用python3读取python2的pickle数据方式
Dec 25 Python
Python调用.net动态库实现过程解析
Jun 05 Python
Python常用模块函数代码汇总解析
Aug 31 Python
Python加载数据的5种不同方式(收藏)
Nov 13 Python
python使用正则表达式匹配txt特定字符串(有换行)
Dec 09 Python
详解python数据结构和算法
Apr 18 #Python
python基础知识(一)变量与简单数据类型详解
Apr 17 #Python
关于python多重赋值的小问题
Apr 17 #Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
Apr 17 #Python
一步步教你用python的scrapy编写一个爬虫
Apr 17 #Python
Python中如何导入类示例详解
Apr 17 #Python
Linux上使用Python统计每天的键盘输入次数
Apr 17 #Python
You might like
php 服务器调试 Zend Debugger 的安装教程
2009/09/25 PHP
php中__destruct与register_shutdown_function执行的先后顺序问题
2014/10/17 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
2017/03/25 PHP
php-msf源码详解
2017/12/25 PHP
关于Mozilla浏览器不支持innerText的解决办法
2011/01/01 Javascript
iframe 异步加载技术及性能分析
2011/07/19 Javascript
jquery formValidator插件ajax验证 内容不做任何修改再离开提示错误的bug解决方法
2013/01/04 Javascript
jQuery中获取checkbox选中项等操作及注意事项
2013/11/24 Javascript
javascript/jquery获取地址栏url参数的方法
2014/03/05 Javascript
jquery选择器大全 全面详解jquery选择器
2014/03/06 Javascript
分享一个常用的javascript静态类
2014/12/31 Javascript
基于jQuery实现多层次的手风琴效果附源码
2015/09/21 Javascript
jQuery 常用代码集锦(必看篇)
2016/05/16 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
2016/09/23 Javascript
小程序的上传文件接口的注意要点解析
2019/09/17 Javascript
Python标准异常和异常处理详解
2015/02/02 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
2018/08/03 Python
Django给admin添加Action的步骤详解
2019/05/01 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
2019/06/05 Python
Pycharm使用之设置代码字体大小和颜色主题的教程
2019/07/12 Python
Python pandas自定义函数的使用方法示例
2019/11/20 Python
python数据库编程 Mysql实现通讯录
2020/03/27 Python
使用Keras实现Tensor的相乘和相加代码
2020/06/18 Python
移动端适配 使px自动转换rem
2019/08/26 HTML / CSS
哥伦比亚最大的网上商店:Linio哥伦比亚
2016/09/25 全球购物
Stutterheim瑞典:瑞典高级外套时装品牌
2019/06/24 全球购物
应聘自荐书
2013/10/08 职场文书
党员干部承诺书范文
2014/03/25 职场文书
材料化学专业求职信
2014/07/15 职场文书
法制教育演讲稿
2014/09/10 职场文书
2014学习优秀共产党员先进事迹材料思想汇报
2014/09/14 职场文书
环卫工作汇报材料
2014/10/28 职场文书
2015年高校教师个人工作总结
2015/05/25 职场文书
德劲DE1102数字调谐收音机机评
2022/04/07 无线电
Go gorilla securecookie库的安装使用详解
2022/08/14 Golang