python | 分析下2023年你写的文章吧

前言

2023正在悄咪咪的过去,2024即将到来,你是否和我一样,收到了掘金的系统通知呢?

你又是否在想,我应该写一些什么东西呢?在掘金掘了一整年,到底收获了金子还是泥土呢?本篇文章就将用短短数十行python代码来扒一扒我们在掘金2023写作的一整年吧。

不为别的,虽然我非常喜欢掘金社区,但是还是吐槽一下,掘金创作者中心做的挺烂的。(此条最好仅优弧可见)

这里先贴一下代码的执行效果:

文章源数据收集

在掘金网页中,点击个人头像,选择【我的主页】,在列表中,选择文章,进入我的主页截图如下:

在主页中,选择文章,就可以看到此前写过的所有文章,截图如下:

最后在网页上按下F12,即可进入到调试模式,选择网络,在搜索框中输入query_list,图示如下:

最后我们使用滚轮往下滑动文章,即可看到请求的数据信息,例如:

点开任何一个请求,选择响应即可看到掘金返回给我们的数据信息,例如:

将每个响应的请求都复制到文件files.txt中,我们即可得到一份这样的数据:

代码编写

得到掘金原始文件后,即可开始编写代码进行分析了,其实代码非常简单,就是循环读取信息,获取其中核心的几个字典进行分析即可,其中返回的数据中,data才是我们真正需要的数据,截图为:

data中的每一个列表,表示一篇文章,熟知的作者信息是被放到author_user_info中,其中截图如下:

而文章的基本信息是被存储在article_info中的,包括阅读量、点赞量、留言量 和 收藏量等等,这个只要结合文章的数值进行搜索记了,截图如下:

这里不啰嗦了,整个分析代码已经写好了,代码整理如下:

python 复制代码
import json
import time

timeStart = "2023-01-01"
timeEnd = "2024-01-01"

count = view_count = digg_count = comment_count = collect_count = 0
maxCollect = maxComment = maxDigg = maxView = [0,""].copy()

timeStartUnix = time.mktime(time.strptime(timeStart,"%Y-%m-%d"))
timeEndUnix = time.mktime(time.strptime(timeEnd,"%Y-%m-%d"))

with open("files.txt",encoding="utf-8") as f:
    while True:
        line = f.readline()

        if len(line) == 0:
            break

        resultData = json.loads(line)

        for i in resultData["data"]:

            article_c = int(i["article_info"]["ctime"])

            if article_c >= timeStartUnix and article_c < timeEndUnix:
                userName = str(i["author_user_info"]["user_name"])
                count = count + 1
                print("%d: %s 《%s》 " %(count,time.strftime("%Y-%m-%d", time.localtime(int(article_c))) ,i["article_info"]["title"]))
                view_count = view_count + int(i["article_info"]["view_count"])
                digg_count = digg_count + int(i["article_info"]["digg_count"])
                comment_count = comment_count + int(i["article_info"]["comment_count"])
                collect_count = collect_count + int(i["article_info"]["collect_count"])

                if maxCollect[0] < int(i["article_info"]["collect_count"]):
                    maxCollect = [int(i["article_info"]["collect_count"]),i["article_info"]["title"]]

                if maxComment[0] < int(i["article_info"]["comment_count"]):
                    maxComment = [int(i["article_info"]["comment_count"]),i["article_info"]["title"]]

                if maxDigg[0] < int(i["article_info"]["digg_count"]):
                    maxDigg = [int(i["article_info"]["digg_count"]),i["article_info"]["title"]]

                if maxView[0] < int(i["article_info"]["view_count"]):
                    maxView = [int(i["article_info"]["view_count"]),i["article_info"]["title"]]


print("%s,在 %s 到 %s 间,你一共写了%d篇文章,阅读量为:%d,点赞量为:%d,留言量为:%d,收藏量为: %d" %(userName,timeStart,timeEnd,count,view_count,digg_count,comment_count,collect_count))
print("分别统计信息为:")
print("阅读量最高的文章是:《%s》,阅读量为:%d" %(maxView[1],maxView[0]))
print("点赞量最高的文章是:《%s》,点赞量为:%d" %(maxDigg[1],maxDigg[0]))
print("留言量最高的文章是:《%s》,留言量为:%d" %(maxComment[1],maxComment[0]))
print("收藏量最高的文章是:《%s》,收藏量为:%d" %(maxCollect[1],maxCollect[0]))

在上述代码中,我们仅需要修改timeStarttimeEnd参数,即可运行代码,得到完整的数据,例如,查询小弟2023年掘金的写作情况,如下:

总结

本人纯python小白,混吃屌丝运维,基础非常差,不会写爬虫,如果阁下会写爬虫的话,可以将数据写入到文件files.txt中,这样的话,就避免了利用浏览器进行数据的收集工作了。但是,利用浏览器调试工具收集数据,其实也不是很慢。一个人一年才写多少文章啊,一个请求中会包含10篇文章,就算3天写一篇文章,那也就是10个请求的事情。

哦,对了,最后希望本篇文章提及的寥寥数行代码可以为你今年在掘金写作画上一个句号,不管它是否是完美的,并且提醒自己,明年继续加油。

相关推荐
oyguyteggytrrwwwrt20 分钟前
3dgs渲染部分详细注释
python
天天爱吃肉82182 小时前
【重磅发布:拿下新超仁达代理权 】
大数据·人工智能·python·功能测试·汽车
神王宝宝 王者小学2 小时前
面向领域驱动架构的查询实现方式
前端·python·架构
ningmengjing_3 小时前
Redis 从入门到实战:Python操作全攻略
数据库·redis·python
️学习的小王3 小时前
智能文档助手:基于RAG的本地化文档问答系统实战指南
人工智能·python·机器学习
不瘦80斤不改名4 小时前
05-vibe-coding-向agentic-engineering演进
人工智能·笔记·python·prompt
笨鸟先飞,勤能补拙4 小时前
AI 安全的下一个 5 年:从 Agent 到 AGI 的攻防博弈
人工智能·python·安全·web安全·网络安全·github·agi
Logintern095 小时前
LangSmith如何根据id关系,在服务端把扁平列表重建为树形结构,用于页面渲染Trace视图
python
月光船幽幽5 小时前
呼吸孔设计重塑系统稳定性
python·科技·算法