前言
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]))
在上述代码中,我们仅需要修改timeStart
和timeEnd
参数,即可运行代码,得到完整的数据,例如,查询小弟2023年掘金的写作情况,如下:
总结
本人纯python
小白,混吃屌丝运维,基础非常差,不会写爬虫,如果阁下会写爬虫的话,可以将数据写入到文件files.txt
中,这样的话,就避免了利用浏览器进行数据的收集工作了。但是,利用浏览器调试工具收集数据,其实也不是很慢。一个人一年才写多少文章啊,一个请求中会包含10篇文章,就算3天写一篇文章,那也就是10个请求的事情。
哦,对了,最后希望本篇文章提及的寥寥数行代码可以为你今年在掘金写作画上一个句号,不管它是否是完美的,并且提醒自己,明年继续加油。