怎么用Python来统计知识星球打卡作业

技术怎么用Python来统计知识星球打卡作业本篇内容主要讲解“怎么用Python来统计知识星球打卡作业”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python来统计知

本文主要讲解“如何使用Python统计知识星球的打卡操作”。感兴趣的朋友不妨看看。本文介绍的方法简单、快速、实用。让边肖带你学习“如何用Python统计知识星球的打卡时间”!

题目是“用Python批改知识星球作业”,感觉太有标题了,所以改了字,不过AI更强的时候是可以做的。我们的知识星球统计每个人每周的作业完成和打卡次数,因为知识星球没有给星主提供运营统计,所以我只能自己解决,特别推荐产品和运营商学一些编程,认识一些爬虫,因为互联网人是靠数据说话的。

我们的目标是统计这个星球上最近一周的打卡和作业完成情况,所以我们要想办法先获取数据,然后对数据进行统计分析。因为知识星球提供PC浏览器版本,我们可以直接从Chrome浏览器找到入口进行数据抓取。

第一步:思路分析

Crawler对数据的获取是用程序模拟浏览器发起网络请求,并将数据采集回来,那么我们先来分析一下浏览器中的网络请求是什么样的。通过扫描微信登录知识星球https://wx.zsxq.com/dweb/后,浏览器右键“Check”,打开开发者模式,选择“Network”查看浏览器发送的每一个网络请求。选择要统计的圆,会看到很多请求。

怎么用Python来统计知识星球打卡作业

这些要求都和圈子有关。在这个阶段,首先你要对整个页面的数据有一个大概的了解。比如这个页面提供的功能包括圈子的基本介绍,明星老板的基本信息,中间的帖子列表,左边的圈子列表。这时需要根据每个请求的返回结果做出判断。

组请求的数据对应于页面左侧的圆形列表。

怎么用Python来统计知识星球打卡作业

话题?Count=20正是我们要找的帖子数据的请求界面。

怎么用Python来统计知识星球打卡作业

找到获取数据的请求接口后,我们先来看看返回的数据结构。

{

topic_id': 48551524482128,

group': {

group_id': 518855855524,

名称' : 'Python禅与朋友'

},

键入' : '通话',

talk': {

所有者' : {

user_id': 15551441848112,

姓名' : '叶仙',

avatar _ URL ' : ' https://file . zsxq . 19 . jpg '

},

Text': '我试了一下,用了大概140秒破解了8位0-9的MD5。'

},

likes_count': 0,

comments_count': 0,

奖励_计数' : 0,

消化' :错误,

sticky': false,

create _ time ' : ' 2018-06-05t 23:39336038.1970800 ',

用户规格

ific": {
       "liked": false,
       "subscribed": false
   }
}

根据接口返回的结果,分析得出每次请求返回的结果包含了20条帖子数据,每条帖子的数据结构也非常清晰,type 表示帖子的类型,talk 是普通的帖子,还有一种叫 solution,表示作业,talk 字段里面指定了发帖者的信息,和所发的内容,还有创建时间。这是一个嵌套的json 字典结构,用 MongoDB 来直接存储这些数据是最方便的,不需要构建 Schema,直接作为一个文档(json)存到数据库就可以,方便后面根据条件进行过滤分组统计。

第二步:代码实现

思路清晰后,写代码其实是很快的,Mongodb 的安装这里就不介绍了,参考网上的教程可以解决。 只需要两个依赖库就可以搞定。

pip install pymongo
pip install requests

现在获取数据的接口找到了,存储数据的方案也确定了,可以正式开始撸代码实现了。先来确定如果我们用代码来模拟浏览器发送获取帖子数据的请求,我们需要提供给哪些请求数据。

怎么用Python来统计知识星球打卡作业

再来详细看这个请求的细节信息,确定了完整的 url 和请求方法 GET,以及很重要的请求头信息。头信息我们把它封装成字典放在get方法中。

def crawl():
   url = "https://api.zsxq.com/v1.10/groups/518855855524/topics?count=20"
   res = requests.get(url, headers=headers) # get 请求
   topics = res.json().get("resp_data").get("topics")
   for i in topics:
       print(i.get("talk").get("text")[:10])
       db.topics.insert_one(i)

现在你还只是获取了前20条数据,要想获取所有的帖子,还需要分页查询,这时你需要使用浏览器加载更多数据来查看请求里面的分页参数是什么。你会发现它是使用上一次请求返回的数据中最后一条帖子的创建时间作为分页参数 end_time 象服务器获取的,所以我们把代码改成:

def crawl(url):
   res = requests.get(url, headers=str_to_dict(headers))
   topics = res.json().get("resp_data").get("topics")
   if len(topics) <= 1:
       return
   for i in topics:
       print(i.get("talk").get("text")[:10])
       db.topics.insert_one(i)
   else:
       last_time = i.get("create_time")
       crawl("https://api.zsxq.com/v1.9/groups/518855855524/topics?count=20" + "&end_time=" + parse.quote(last_time))

我使用递归的方式将这个圈子里面所有的帖子全部爬下来。

怎么用Python来统计知识星球打卡作业

第三步:数据统计

数据拿到了,现在正是可以进入分析统计阶段了。

我们需要用到 MongoDB 的聚合功能,根据每个人的发帖数进行分组排名,并指定匹配查询条件(我查询的是时间大于某个指定的日期),有人说,是不是我还需要先去学完 MongoDB 才能做统计了。其实也不,你可以借用强大的搜索引擎来帮助你怎么做这这种复杂的操作。

话说回来,你还是要对MongoDB有基本的了解和掌握简单的操作,快速入门后才知道怎么去搜索你要的答案,否则也是无从下手。

def statics():
   # 打卡
   talk = db.topics.aggregate(
       [
           {"$match": {"create_time": {"$gte": "2018-05-28T00:00:14.202+0800"}}},
           {
               "$group": {
                   "_id": {
                       "user_id": "$talk.owner.user_id",
                       "name": "$talk.owner.name",
                   },
                   "count": {"$sum": 1},
               }
           },
           {"$sort": {"count": -1}},
       ]
   )

这是我根据刷选条件,根据帖子的创建时间大于等于指定时间,再根据发帖者的id和名字进行分组统计,最后按照降序进行排列。 type 为 solution 的作业帖子也使用同样的方式,即可统计出来。最终写入 cvs 文件,展示出来的效果是:

怎么用Python来统计知识星球打卡作业

到此,相信大家对“怎么用Python来统计知识星球打卡作业”有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/125500.html

(0)

相关推荐

  • 关系型数据库的设计规则有哪些

    技术关系型数据库的设计规则有哪些本篇内容介绍了“关系型数据库的设计规则有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成

    攻略 2021年12月11日
  • 如何理解算法的复杂度

    技术如何理解算法的复杂度本篇内容主要讲解“如何理解算法的复杂度”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解算法的复杂度”吧!1. Motivation - 为什么需

    攻略 2021年10月26日
  • c++编译器(c++培训)

    技术怎么使用VS2022开发在线远程编译部署的C++程序这篇文章主要介绍“怎么使用VS2022开发在线远程编译部署的C++程序”,在日常操作中,相信很多人在怎么使用VS2022开发在线远程编译部署的C++程序问题上存在疑

    攻略 2021年12月16日
  • 解魔方的方法的步骤,魔方最简单的恢复方法谢谢

    技术解魔方的方法的步骤,魔方最简单的恢复方法谢谢在这里向大家介绍一种比较简单的魔方六面还原方法解魔方的方法的步骤。这种方法熟练之后可以在大约30秒之内将魔方的六面还原。 在介绍还原法之前,首先说明一下魔方移动的记法。魔方

    生活 2021年10月28日
  • 在SQL Server中如何查询资料库的TABLE数量与名称的sql语句

    技术在SQL Server中如何查询资料库的TABLE数量与名称的sql语句今天就跟大家聊聊有关在SQL Server中如何查询资料库的TABLE数量与名称的sql语句,可能很多人都不太了解,为了让大家更加了解,小编给大

    攻略 2021年12月1日
  • Atomikos + druid 多数据源数据库连接超时回收问题怎么解决

    技术Atomikos + druid 多数据源数据库连接超时回收问题怎么解决Atomikos + druid 多数据源数据库连接超时回收问题怎么解决,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细

    攻略 2021年12月1日