• python爬虫12 | 爸爸,他使坏,用动态的 Json 数据,我要怎么搞?


     

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

     

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

     

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

     

    比如

     

    商品的评论数据

     

    实时的直播弹幕

     

    岛国动作片的评分

     

    等等

     

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

     

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

     

    因为 Json 非常轻量

     

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

     

    就像 python 里的字典似的

     

     

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

     

     

     

    这次

     

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

     

    告诉你怎么玩 Json 数据

     

     

     

     

    那么接下来就是

     

    学习python的正确姿势

     

     

     

     

    微信有一个网页版

     

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

     

    很多人都想拿来搞事情

     

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

     

    当然

     

    对于 Python 来说

     

    少即是多

     

    能封装就封装

     

    所以有了一个叫做 itchat 模块

     

    你不再需要去各种抓包

     

    直接使用就得了

     

    比方便面还方便呢

     

     

    好像有点偏题了

     

    今天是要说 Json 的是吧

     

    打开微信网页版

     

    https://wx2.qq.com/

     

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

     

     

    可以看到

     

    微信的每一个好友

     

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

     

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

     

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

     

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

     

     

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

     

     

     

    ok

     

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

     

    本篇完

     

    近期文章

     

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

     

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

     

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

    扫一扫

    学习 Python 没烦恼

     

     

     

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

     

     

  • 相关阅读:
    halconerosion_rectangle1矩形区域腐蚀
    halconauto_threshold自动全局阈值
    halcongray_erosion_rect图像腐蚀
    halcongray_histo计算直方图
    halcondilation_rectangle1矩形区域膨胀
    halconwatersheds_threshold分水岭阈值
    halconerosion_circle圆形区域腐蚀
    云图说丨带你了解GaussDB(for Redis)双活解决方案
    如何实时、高效地处理如此海量的路况数据?
    带你认识什么是“回流重绘”
  • 原文地址:https://www.cnblogs.com/fxxkpython/p/10832198.html
Copyright © 2020-2023  润新知