python爬⾍难点解析——动态json数据处理
python爬⾍难点解析——动态json数据处理
前⾔
在前⾯爬取诸多案例,我们已经学会了怎么处理静态的html。但是还有许多常见的动态数据,⽐如⽐赛的实时弹幕,商品的评论数据,电影的评分等等,这些数据是会经常繁盛改变的呃,很多⽹站就会⽤到JSon来传输数据。
因为Json⾮常轻量,它是使⽤key-value键值对的形式封装成对象,就像python的字典⼀样。
那么Json数据怎么处理呢,这次以⼀个实战为例,告诉你怎么处理Json数据
json数据格式介绍
JSON(JavaScript object Notation JavaScript对象表⽰法)是⼀种轻量级的数据交换格式
JSON建构于两种结构:json是JavaScript中的对象和数组中的对象,本质上来讲就是有特定结构的字符串,所以可以通过这两种结构表⽰各种复杂的结构
1.对象:对象在js中表⽰为“{}”括起来的内容,数据结构为{key:vaue,key:value…}的键值对结构,在⾯向对象的语⾔中,key为对象的属性,value为对应属性的值。所以很容易去理解。属性值value可以是数字 字符串 数组 对象
2.数组:数组在js中是中括号“[ ]”括起来的内容,数据结构为[ “java”,“javascript”,“vb”……]取值⽅式和所有语⾔⼀样 通过索引去获取,字段值的类型是:数字 字符串 数组 对象等
简单地说,JSON 可以将 JavaScript 对象中表⽰的⼀组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应⽤程序中将字符串从 Web 客户机传递给服务器端程序。这个字符串看起来有点⼉古怪,但是 JavaScript 很容易解释它,⽽且 JSON 可以表⽰⽐”名称 / 值对”更复杂的结构。例如,可以表⽰数组和复杂的对象,⽽不仅仅是键和值的简单列表。
按照最简单的形式,可以⽤下⾯这样的 JSON 表⽰ “名称 / 值对” :{ “firstName”: “Brett” }
当需要表⽰⼀组值时,JSON 不但能够提⾼可读性,⽽且可以减少复杂性。
如:
{
"people":[
{"firstName":"111",....},
{"firstName":"222",...},
{"firstName":"333",...}
]}
准备数据
具体的⼀个好友数据:
{
"Uin":0,
"UserName":"13482d24214c3971d9f8c352525c",
"NickName":"路⼈甲",
"HeadImgUrl":"/cgi-bin/mmwebwx-bin/webwxgeticon?seq=500080&username=@c482d142bc698bc3
971d9f8c26335c5c&skey=@crypt_b0f5e54e_b80a5e6 dffebd14896dc9c72049712bf",
"ContactFlag":1,
"MemberCount":1,
"MemberList":[
],
"RemarkName":"",
"HideInputBarFlag":0,
"Sex":1,
"Signature":"",
"VerifyFlag":0,
"OwnerUin":0,
"PYInitial":"XSB",
"PYQuanPin":"xiaoshuaib",
"RemarkPYInitial":"",
"RemarkPYQuanPin":"",
"StarFriend":0,
"AppAccountFlag":0,
"Statues":0,
"AttrStatus":91131,
"Province":"⼴东",
"City":"⼴州",
"Alias":"",
"SnsFlag":48,
"UniFriend":0,
"DisplayName":"",
"ChatRoomId":0,
"KeyWord":"che",
"EncryChatRoomId":"",
"IsOwner":0
}
在这个Json对象⾥⾯有很多好友的信息。如头像,昵称,性别等
处理数据
对于Json数据的处理,python给我们提供了⼀个Json模块进⾏处理。Json模块主要有两个函数json.dumps()和json.loads()
提⽰:
所谓类⽂件对象指那些具有read()或者 write()⽅法的对象,例如,f = open(‘a.txt’,‘r’),其中的f有read()⽅法,所以f就是类⽂件对象。
json.dumps()
json.dumps()函数功能是将python对象转化为jsonpython请求并解析json数据
import json
data ={
'name':'pengjunlee',
'age':32,
'vip':True,
'address':{'province':'GuangDong','city':'ShenZhen'}
}
#将python字典类型转换为Json对象
json_str = json.dumps(data)
print(json_str)
作用是什么#输出结果:{"name": "pengjunlee", "age": 32, "vip": true, "address": {"province": "GuangDong", "city": "ShenZhen"}}
json.loads()
json.loads()函数功能是将json数据转化为python对象
例如:
import json
jsondata ="""
{
"Uin":0,
"UserName":"13482d24214c3971d9f8c352525c",
"NickName":"路⼈甲",
"HeadImgUrl":"/cgi-bin/mmwebwx-bin/webwxgeticon?seq=500080&username=@c482d142bc698bc3971d9f8c26335c5c&skey=@crypt_b0f5e54e_b80a5e6 dffebd14896dc9c72049712bf",
招商网站"ContactFlag":1,
"MemberCount":1,
"MemberList":[
],
"RemarkName":"",
"HideInputBarFlag":0,
"Sex":1,
"Signature":"",
"VerifyFlag":0,
"OwnerUin":0,
"PYInitial":"XSB",
"PYQuanPin":"xiaoshuaib",
"RemarkPYInitial":"",
"RemarkPYQuanPin":"",
"StarFriend":0,
"AppAccountFlag":0,
"Statues":0,
"AttrStatus":91131,
"Province":"⼴东",ascii码如何表示汉字
"City":"⼴州",
tcp ip协议模型
"Alias":"",
"SnsFlag":48,
"UniFriend":0,
"DisplayName":"",
"ChatRoomId":0,
"KeyWord":"che",
"EncryChatRoomId":"",
"IsOwner":0
}
"""
#member 转换成python可以使⽤的字典对象
member = json.loads(jsondata)
#获取昵称
("NickName"))
#输出结果:路⼈甲
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论