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 毛钱哦~~想想就开心。
python爬虫12 | 爸爸,他使坏,用动态的 Json 数据,我要怎么搞?的更多相关文章
- ECharts 环形饼图 动态获取json数据
ECharts 环形饼图 动态获取json数据 效果图如下: 一.html部分 <div id="secondPieChart" style="width:100 ...
- 爬虫--selenuim和phantonJs处理网页动态加载数据的爬取
1.谷歌浏览器的使用 下载谷歌浏览器 安装谷歌访问助手 终于用上谷歌浏览器了.....激动 问题:处理页面动态加载数据的爬取 -1.selenium -2.phantomJs 1.selenium 二 ...
- Python爬虫:为什么你爬取不到网页数据
前言: 之前小编写了一篇关于爬虫为什么爬取不到数据文章(文章链接为:Python爬虫经常爬不到数据,或许你可以看一下小编的这篇文章), 但是当时小编也是胡乱编写的,其实里面有很多问题的,现在小编重新发 ...
- Python爬虫系列之爬取美团美食板块商家数据(二)
今天为大家重写一个美团美食板块小爬虫,说不定哪天做旅游攻略的时候也可以用下呢.废话不多说,让我们愉快地开始吧~ 开发工具 Python版本:3.6.4 相关模块: requests模块: argpar ...
- Python爬虫开发【第1篇】【Json与JsonPath】
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适用于进行数据交互的场景,比如网站前台与 ...
- python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
1. 场景描述 一直做java,因项目原因,需要封装一些经典的算法到平台上去,就一边学习python,一边网上寻找经典算法代码,今天介绍下经典的K-means聚类算法,算法原理就不介绍了,只从代码层面 ...
- python中jsonpath模块,解析多层嵌套的json数据
1. jsonpath介绍用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, ...
- Python爬虫爬取qq视频等动态网页全代码
环境:py3.4.4 32位 需要插件:selenium BeautifulSoup xlwt # coding = utf-8 from selenium import webdriverfrom ...
- Python爬虫(二十三)_selenium案例:动态模拟页面点击
本篇主要介绍使用selenium模拟点击下一页,更多内容请参考:Python学习指南 #-*- coding:utf-8 -*- import unittest from selenium impor ...
随机推荐
- shell 字符串拼接 获取自身文件名 日志记录
shell 字符串拼接 获取自身文件名 日志记录 [root@hadoop2 xiaole_chk_url]# sh a.sh123.loga.sh[root@hadoop2 xiaole_chk_ ...
- ios12--简易购物车
Assets.xcassets图片是拖到右边里面去的. // // ViewController.m // 03-综合练习 // #import "ViewController.h" ...
- 2017iOS开发最新的打包测试步骤(亲测)
最近也是忙着修改项目,今天把最近遇到的问题和知识给大家分享一下. 有时候我们需要将我们的项目发给测试组进行bug测试,这时候我们就需要把自己的项目打包,生成一个二维码或者链接的形式,给测试组,接下来就 ...
- python 循环高级用法 [expression for x in X [if condition] for y in Y [if condition] ... for n in N [if condition] ]按照从左至右的顺序,分别是外层循环到内层循环
高级语法 除了像上面介绍的 [x ** 2 for x in L] 这种基本语法之外,列表推导式还有一些高级的扩展. 4.1. 带有if语句 我们可以在 for 语句后面跟上一个 if 判断语句,用于 ...
- StackExchange.Redis 使用资料
在StackExchange.Redis中最重要的对象是ConnectionMultiplexer类, 它存在于StackExchange.redis命名空间中.这个类隐藏了Redis服务的操作细节, ...
- linux命令 - free -m
如下显示free是显示的当前内存的使用,-m的意思是M字节来显示内容.我们来一起看看. [root@zabbix ~]# free -m total used free shared buffers ...
- E20170624-ts
stateless adj. 无国家的,无国籍的; groupware 群件 cookie n. 饼干; 小甜点; 吸引人的年轻妇女; 甜面包; session n. 开会,会议; (法庭的) 开 ...
- BZOJ 2178 Simpson积分
思路: 我发现能用Simpson积分水的题 好像都是裸题诶233333 //By SiriusRen #include <bits/stdc++.h> using namespace s ...
- BZOJ 4310 二分+SA+RMQ
思路: 首先求出后缀数组和height数组,这样能得到本质不同的子串数目 这里利用:本质不同的子串=∑(Len−SA[i]−height[i])=∑(Len−SA[i]−height[i])利用SA[ ...
- 【转】 Java 集合系列07之 Stack详细介绍(源码解析)和使用示例
概要 学完Vector了之后,接下来我们开始学习Stack.Stack很简单,它继承于Vector.学习方式还是和之前一样,先对Stack有个整体认识,然后再学习它的源码:最后再通过实例来学会使用它. ...