python中for循环的用法_python爬虫12 | 爸爸,他使坏,用动态的 Json 数据,我要怎么搞?...

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


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


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


比如


商品的评论数据


实时的直播弹幕


岛国动作片的评分


等等


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


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


因为 Json 非常轻量


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


就像 python 里的字典似的



f241365693ba114fe638411317b9f8a2.gif



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




这次


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


告诉你怎么玩 Json 数据



2a34ffc594148af04563a39daf0149f0.png




616d68a3c42823a6c6478b3cc8646f7f.gif




那么接下来就是


学习python的正确姿势


微信有一个网页版


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


很多人都想拿来搞事情


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


当然


对于 Python 来说


少即是多


能封装就封装


所以有了一个叫做 itchat 模块


你不再需要去各种抓包


直接使用就得了


比方便面还方便呢


好像有点偏题了


今天是要说 Json 的是吧


打开微信网页版


https://wx2.qq.com/


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



f7c5a48f210aff36038fbe1f6dc69762.png



可以看到


微信的每一个好友


被封装成一个一个的 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 对象里面


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


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


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



ec94928788c28d4dc5f5730f4f017990.png



我们可以用到 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 循环就能轻而易举的获取到啦



5f314665e497f0b03a73fa0788340e76.gif




ok


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


本篇完


近期文章


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


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


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


ba4008cf9c5c66c841f9de18e8cc36d0.gif


扫一扫

学习 Python 没烦恼



8382fe6fa9b0908ba4b9f50ac6705169.png


点个赞~~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值