在前面我们玩了好多静态的 HTML 

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

 

想必你应该知道怎么去爬这些数据了

 

但还有一些常见的动态数据

 

比如

 

商品的评论数据

 

实时的直播弹幕

 

岛国动作片的评分

 

等等

 

这些数据是会经常发生改变的

 

很多网站就会用到 Json 来传输这些数据

 

因为 Json 非常轻量

 

用 key-value 的形式封装成对象

 

就像 python 里的字典似的

 

python爬虫12 | 爸爸,他使坏,用动态的 Json 数据,我要怎么搞? 随笔 第1张

 

那么遇到 Json 我们应该怎么玩呢?

 

 

 

这次

 

小帅b以「爬取微信好友列表」为例

 

告诉你怎么玩 Json 数据

 

python爬虫12 | 爸爸,他使坏,用动态的 Json 数据,我要怎么搞? 随笔 第2张

 

python爬虫12 | 爸爸,他使坏,用动态的 Json 数据,我要怎么搞? 随笔 第3张

 

 

那么接下来就是

 

学习python的正确姿势

 

 

 

python爬虫12 | 爸爸,他使坏,用动态的 Json 数据,我要怎么搞? 随笔 第4张

 

微信有一个网页版

 

这个网页版的数据请求啥的

 

很多人都想拿来搞事情

 

所以现在市面上有很多微信机器人

 

当然

 

对于 Python 来说

 

少即是多

 

能封装就封装

 

所以有了一个叫做 itchat 模块

 

你不再需要去各种抓包

 

直接使用就得了

 

比方便面还方便呢

 

python爬虫12 | 爸爸,他使坏,用动态的 Json 数据,我要怎么搞? 随笔 第5张

 

好像有点偏题了

 

今天是要说 Json 的是吧

 

打开微信网页版

 

https://wx2.qq.com/

 

我们使用 Chrome(←可以点击) 来看一下具体的返回数据

 

python爬虫12 | 爸爸,他使坏,用动态的 Json 数据,我要怎么搞? 随笔 第6张

 

可以看到

 

微信的每一个好友

 

被封装成一个一个的 Json 对象

 

最后封装成一个 Json 数组

 

也就是 MemberList

 

我们来看看具体的一个好友的数据是怎么样的

 

{
"Uin":0,
"UserName":"@c482d142bc698bc3971d9f8c26335c5c",
"NickName":"小帅b",
"HeadImgUrl":"/cgi-bin/mmwebwx-bin/webwxgeticon?seq=500080&username=@c482d142bc698bc3971d9f8c26335c5c&skey=@crypt_b0f5e54e_b80a5e6dffebd14896dc9c72049712bf",
"ContactFlag":3,
"MemberCount":0,
"MemberList":[

],
"RemarkName":"",
"HideInputBarFlag":0,
"Sex":1,
"Signature":"",
"VerifyFlag":0,
"OwnerUin":0,
"PYInitial":"XSB",
"PYQuanPin":"xiaoshuaib",
"RemarkPYInitial":"",
"RemarkPYQuanPin":"",
"StarFriend":0,
"AppAccountFlag":0,
"Statues":0,
"AttrStatus":98491,
"Province":"广东",
"City":"广州",
"Alias":"",
"SnsFlag":48,
"UniFriend":0,
"DisplayName":"",
"ChatRoomId":0,
"KeyWord":"che",
"EncryChatRoomId":"",
"IsOwner":0
}

 

在这个 Json 对象里面

 

包含了微信好友的很多信息

 

比如 昵称、头像、备注、性别等等

 

那么如何从这些数据中拿到我们想要的呢?

 

python爬虫12 | 爸爸,他使坏,用动态的 Json 数据,我要怎么搞? 随笔 第7张

 

我们可以用到 json 模块了

 

python 的 json 模块有两个主要的函数

 

 

 

1

 

将 python 对象转化为 json是这样的

 

json.dumps()

 

2

 

将json数据转化为python对象是这样的

 

json.loads()

 

这也是我们用的比较多的方法

 

就拿我们刚刚获取到微信好友的数据来玩

 

import json

jsondata = '''
{
"Uin":0,
"UserName":"@c482d142bc698bc3971d9f8c26335c5c",
"NickName":"小帅b",
"HeadImgUrl":"/cgi-bin/mmwebwx-bin/webwxgeticon?seq=500080&username=@c482d142bc698bc3971d9f8c26335c5c&skey=@crypt_b0f5e54e_b80a5e6dffebd14896dc9c72049712bf",

...此处省略一些..

"DisplayName":"",
"ChatRoomId":0,
"KeyWord":"che",
"EncryChatRoomId":"",
"IsOwner":0
}
'''

myfriend = json.loads(jsondata)

 

 

这样子我们就可以直接操作了

 

因为 myfriend 已经被转化为 python 可以使用的字典对象了

 

比如我们要获取他的昵称

 

那么可以这样

 

myfriend.get('NickName')

 

这就是我们拿到一个 Json 数据对象后对它的操作

 

当然

 

我们刚刚举的例子只是 Json 对象

 

常见的还有 Json 数组

 

也就是把多个对象组合起来

 

就像我们 Python 的 list 

 

比如有这样的 Json 数组的数据

 

{
"MemberList":[
{
"UserName":"小帅b",
"sex":"男"
},
{
"UserName":"小帅b的1号女朋友",
"sex":"女"
},
{
"UserName":"小帅b的2号女朋友",
"sex":"女"
}
]
}

 

 

这个时候我们想要获取好友列表

 

myfriends = json.loads(jsondata)
memberList = myfriends.get('MemberList')

 

我们得到的 memberList 就是一个 Python 的 list 对象了

 

那么对于 list 里面的数据

 

我们用个 for 循环就能轻而易举的获取到啦

 

python爬虫12 | 爸爸,他使坏,用动态的 Json 数据,我要怎么搞? 随笔 第8张

 

 

ok

 

下次小帅b还会在爬取项目中带你玩玩 Json

 

本篇完

 

近期文章

 

python爬虫09 | 上来,自己动 !这就是 selenium 的牛逼之处

 

python爬虫10 | 网站维护人员:真的求求你们了,不要再来爬取了!!

 

python爬虫11 | 这次,将带你爬取b站上的NBA形象大使蔡徐坤和他的球友们

python爬虫12 | 爸爸,他使坏,用动态的 Json 数据,我要怎么搞? 随笔 第9张

扫一扫

学习 Python 没烦恼

 

python爬虫12 | 爸爸,他使坏,用动态的 Json 数据,我要怎么搞? 随笔 第10张

 

 

ps:小帅b力求由浅入深带你玩转 python ,如果觉得对你有帮助的话还希望你点点好看和戳戳广,这样小帅b能赚到不良商家 2 毛钱哦~~想想就开心。

 

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄