Python微博爬取实战(三)爬虫获得的json格式数据如何处理

系列文章

Python 微博爬取实战(一)爬虫参数:如何获得cookie,实现爬虫登陆爬取
Python微博爬取实战(二)解析微博结构、爬取每页微博
Python微博爬取实战(三)爬虫获得的json格式数据如何处理
Python微博爬取实战(四)微博爬虫具体实现

处理json数据


上一此在介绍如何获取cookie时候已经说过,在网页开发者功能里面可以对网页进行抓包分析,详见:

Python 微博爬取实战(一)爬虫参数:如何获得cookie,实现爬虫登陆爬取

1.那么问题来了,什么是json数据呢?



先介绍一下历史:
过去传统网站开发,网站就像电脑里面的文件目录,用户通过浏览器直接访问服务器内文件。
在这里插入图片描述
(侵删)


就像我们电脑的某个盘,随着使用时间变久,文件越来越多,会发现文件越来越难以管理。出现文件寻找难度大,文件损坏,污染数据等问题。


所以我们构建数据库作为服务器的数据管理内核,来支撑BS架构,数据管理更方便的同时,由于隔离了浏览器和数据的直接接触,安全性也大大提高。


在这里插入图片描述
上图来源:https://www.cnblogs.com/animo-2020/p/12744176.html(侵删)



我们可以简单类比数据库为一个函数(function),我们的浏览器类比主函数,当浏览器向数据库内传入某些关键参数时,数据库return一些数据。


那数据是怎么return的呢,体现在浏览器抓包中的json格式数据。
其形式为(其中每个obj可以进行扩充,形成了多层嵌套)

{“key1”:obj,“key2”:[“key1”:object,obj,obj…],“key3”:obj…}


如果我们想要获取其中的object,用什么方法比较好呢? 以python为例 观察其格式可以发现,它是字典(dic)和列表(list)两种数据格式构成的,因此我们可以用解析这两种数据的方法来解析。

python提供了json包来辅助我们进行解析,还是来看上面微博的例子。

假设我们已经完成这些事情:

  1. 正确向服务器发送参数
  2. 骗过服务器了,服务器向我们返回了正确的数据。

OK,那么进行下一步




2.如何解析json格式数据——微博为例

我们以一个任务为例,后面如果有需求再增加几个例子
比如我要获得微博总页数,那么思路应该是这样子的:

获得总微博数量
向上取整
解析json数据
把总微博数量除以每页的微博量
总页数



看一下网页的json结构:
在这里插入图片描述
如何生成这种json格式浏览图参看:https://blog.csdn.net/weixin_43718786/article/details/108364219


其中total即为总微博数量。

  • 分析一下
    total第一层被包裹在一个字典(dic)的键值(key):data里面
    第二层还是在一个字典(dic)的键值(key):cardlistInfo里面
    第三层为键值(key):total里面

如果有list加下标index即可,当然这个案例里并没有出现需要用到list的情况。

js[‘data’][‘cardlistInfo’].get(‘total’, 0)

所以本例可以这样写,get()里面的0代表total如果有列表选取第一个值。



开始代码:
在request函数模块里面,将返回的数据进行处理:

	r = requests.get(url, params=params)
    return r.json()  #返回json数据

在下一步里面,js变量将接收来自上个模块返回的数据(即r.json())

js = self.get_json(params)
        if js['ok']:
        	user_info['statuses_count'] =  js['data']['cardlistInfo'].get('total', 0)      #获取总条数
        	print('共{}条' .format(user_info['statuses_count']))
        	page_count = int(math.ceil(weibo_count / 10.0))  #总页数
        	

page_count 即为总页数,此案例演示完毕

猜你喜欢

转载自blog.csdn.net/weixin_43718786/article/details/108893549