本篇内容主要讲解“怎么用Python来统计知识星球打卡作业”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习”怎么用Python来统计知识星球打卡作业”吧!
标题叫“用Python批改知识星球作业”,感觉太标题党了,所以换了个词,不过等人工智能更强大点是有可能做到的。咱们知识星球,每周都要统计大家的作业完成情况与打卡次数,因为知识星球没有给星主提供运营统计数据,所以,我只能自己动手解决,特别推荐产品和运营人员学点编程,懂点爬虫,因为互联网人都是靠数据说话的。
我们的目标是统计出最近一周在星球里的打卡与作业完成情况,所以我们先要想办法拿到数据,再对数据进行统计分析。因为知识星球提供了PC浏览器版本,数据的抓取我们直接从Chrome浏览器找入口。
第一步:思路分析
爬虫获取数据就是利用程序模拟浏览器发起网络请求,将数据采集回来,所以,我们先来分析网络请求在浏览器里面是怎样的。微信扫描登录知识星球https://wx.zsxq.com/dweb/后,浏览器右键“检查”,打开开发者模式选择“网络”就可以看到浏览器发出的每个网络请求,选择你要进行统计的圈子,你会看到有很多请求。
这些请求全部是和该圈子相关的,在这个阶段首先你要对整个往页的数据有个大概了解,比如在该页面提供的功能有圈子的基本介绍,星主的基本信息,中间是帖子列的表,左侧是圈子列的表,此时你需要根据每个请求的返回结果做出判断
组请求的数据对应页面左边的圈子列表。
主题?数=20正是我们要找的帖子数据的请求接口
找到了获取数据的请求接口后,我们先来对返回的数据结构了解一下
<代码> {
,,“topic_id": 48551524482128,
,,“group": {
,,,,“group_id": 518855855524,
,,,,“name":“Python之禅和朋友们“
,},
,,“type":“talk",
,,“talk": {
,,,,“称:{
,,,,,,“user_id": 15551441848112,
,,,,,,“name":“叶宪”,
,,,,,,“avatar_url":“https://file.zsxq.19.jpg"
,,,},
,,,,“text":“我尝试了一下,8位0 - 9纯数字的MD5暴力破解花了约140秒!”
,},
,,“likes_count": 0,
,,“comments_count": 0,
,,“rewards_count": 0,
,,“digested":假的,
,,“sticky":假的,
,,“create_time":“2018 - 06 - 05 t23:39:38.197 + 0800“,
,,“user_specific": {
,,,,“liked":假的,
,,,,“subscribed":假
,,}
} 代码>
根据接口返回的结果,分析得出每次请求返回的结果包含了20条帖子数据,每条帖子的数据结构也非常清晰,类型表示帖子的类型,谈话是普通的帖子,还有一种叫解决方案,表示作业,说字段里面指定了发帖者的信息,和所发的内容,还有创建时间。这是一个嵌套的json字典结构,用MongoDB来直接存储这些数据是最方便的,不需要构建模式,直接作为一个文档(json)存到数据库就可以,方便后面根据条件进行过滤分组统计。
第二步:代码实现
思路清晰后,写代码其实是很快的,MongoDB的安装这里就不介绍了,参考网上的教程可以解决。只需要两个依赖库就可以搞定。
pip install pymongo pip install 请求
现在获取数据的接口找到了,存储数据的方案也确定了,可以正式开始撸代码实现了。先来确定如果我们用代码来模拟浏览器发送获取帖子数据的请求,我们需要提供给哪些请求数据。
再来详细看这个请求的细节信息,确定了完整的url和请求方法,以及很重要的请求头信息。头信息我们把它封装成字典放在得到方法中。
<代码> def爬():
,,url=癶ttps://api.zsxq.com/v1.10/groups/518855855524/topics?count=20"
,res=请求。获得(url,头=头)#请求
,,主题=res.json () . get (“resp_data") . get (“topics")
,,因为我在主题:
,,,,打印(i.get (“talk") . get (“text") [10])怎么用Python来统计知识星球打卡作业