当前位置: 首页 > news >正文

自动保存知乎上点赞的内容至本地

背景:知乎上常有非常精彩的回答/文章,必须要点赞+收藏,日后回想起该回答/文章时翻看自己的动态和收藏夹却怎么也找不到,即使之前保存了链接网络不好也打不开了(。所以我一般碰到好的回答/文章都会想办法保存它的离线版本,但人是懒的,有没有什么办法可以自动保存我点赞/公开收藏过的内容呢。经过苦苦搜寻,终于我找到了这么一个开源的工具:

https://github.com/amchii/ZhiArchive,监测知乎用户的个人动态并保存内容以防丢失​

Docker快速部署好之后,每当我点赞某个内容的时候,它都会帮我拍一个动态和该内容的长截图,妈妈再也不用担心我丢三落四了。

以下是它的介绍:

ZhiArchive

监测知乎用户的个人动态并保存内容以防丢失。

某用户的动态结果保存目录如下:
activities为个人动态页快照,archives为动态对应的回答/文章快照

.  
├── activities  
│   ├── 2024  
│   │   └── 01  
│   │       └── 17  
│   │           ├── 回答-为什么只有饿死的狮子而没有饿死的老虎?说明了什么问题?.png  
│   │           ...  
│   │           └── 赞同-如何看待211高校华中某业大学动物Y养系黄某若教授十几年如一日的学术造假行为?.png  
│   └── 20240117181850.json  
└── archives  └── 2024  └── 01  └── 17  ├── 回答-为什么只有饿死的狮子而没有饿死的老虎?说明了什么问题?  │   ├── info.json  │   └── 回答-为什么只有饿死的狮子而没有饿死的老虎?说明了什么问题?.png  ...  └── 赞同-如何看待211高校华中某业大学动物Y养系黄某若教授十几年如一日的学术造假行为?  ├── info.json  └── 赞同-如何看待211高校华中某业大学动物Y养系黄某若教授十几年如一日的学术造假行为?.png  16 directories, 25 files  

其中:
动态文件activities/2024/01/17/赞同-如何看待211高校华中某业大学动物Y养系黄某若教授十几年如一日的学术造假行为?.png如图:
在这里插入图片描述

目标文件archives/2024/01/17/赞同-如何看待211高校华中某业大学动物Y养系黄某若教授十几年如一日的学术造假行为?/赞同-如何看待211高校华中某业大学动物Y养系黄某若教授十几年如一日的学术造假行为?.png如图:
在这里插入图片描述

archives/2024/01/17/赞同-如何看待211高校华中某业大学动物Y养系黄某若教授十几年如一日的学术造假行为?/info.json内容为:

{  "title": "如何看待211高校华中某业大学动物Y养系黄某若教授十几年如一日的学术造假行为?",  "url": "https://zhuanlan.zhihu.com/p/678136207",  "author": "zhang-li-28-1",  "shot_at": "2024-01-17T18:19:13.783"  
}  

它是如何工作的

ZhiArchive使用Playwright,它由4个部分组成,分别是monitor,archiver,login worker和api:

  • monitor:用于监测用户个人主页的动态并将新的动态:打快照,把动态的目标(回答、文章)链接通过redis丢给archiver
  • archiver:打开目标链接并保存屏幕快照至本地。
  • login worker:用于登录知乎获取monitorarchiver所必需的认证信息。
  • api:提供接口来操作控制monitorarchiverlogin worker

使用

注意查看日志跟踪运行状态
archiver: archiver.log
monitor: monitor.log
login_worker: login_worker.log

Docker

下载本项目:
# 下载本项目  
git clone https://github.com/amchii/ZhiArchive.git  
# 进入项目目录  
cd ZhiArhive  
构建镜像:
docker build -t zhi-archive:latest -f BaseDockerfile .  
配置环境变量:

所有可配置项见config.py,支持通过环境变量或.env.apienv文件配置

.env文件

secret_key=  # 请生成一个随机字符串  
people=<someone>  # 知乎用户,在个人主页地址中:https://www.zhihu.com/people/<someone>  
monitor_fetch_until=10  # 天数,Monitor初次运行时默认抓取到10天前的动态  

.apienv文件

# API认证账号,配置用户名和密码  
username=  
password=  
启动
docker compose up -d  

API端口为9090,以127.0.0.1为例,
打开http://127.0.0.1:9090/docs可查看接口文档,下面👇🏻所提到的接口可在这个接口文档进行调用,调用之前请先打开http://127.0.0.1:9090/auth/login登录获取本项目的接口认证信息(Cookies)

登录知乎获取Cookie

打开http://127.0.0.1:9090/zhi/login获取知乎登录二维码:
在这里插入图片描述

扫码完成登录后将重定向到"http://127.0.0.1:9090/zhi/login/state/f19c99849de8dccc8e9b" 并显示获取的cookies,路径最后的’f19c99849de8dccc8e9b’将是你的state文件地址,文件存储路径为<项目目录>/states/f19c99849de8dccc8e9b.state.json,可通过接口GET/PUT /zhi/core/state_path 查看和设置正在运行的MonitorArchiver的state文件。
(后续考虑登录完成即设置state)

运行Monitor和Archiver

Monitor和Archiver默认是暂停状态,设置好知乎的Cookie后,可以通过接口:
/zhi/core/{name}/pause查看和更改运行状态,name可以是’monitor’或’archiver’
运行后查看日志输出和结果目录。

TODO

  • 所有元素selector可配置
  • 通过接口完全控制Monitor, Archiver
  • 支持监测多个用户
  • 异常告警
  • 提供前端界面

欢迎交流,Star⭐️一下,项目随时更新

相关文章:

  • 计算机组成原理学习| Day1
  • 【SpringCloud】使用OpenFeign进行微服务化改造
  • VUE PC端可拖动悬浮按钮
  • 《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第5章 决策树
  • 基于布谷鸟搜索的多目标优化matlab仿真
  • 微信小程序 安卓/IOS兼容问题
  • python爬虫3
  • 软件压力测试:探究其目的与重要性
  • 洛谷p1644跳马问题
  • 页面切换导致echarts不加载的问题
  • 【c语言】简单贪吃蛇的实现
  • Uboot中ARMV7和ARMV8 MMU配置
  • vscode git stash apply stash@{1}不生效
  • 基于python+django,我开发了一款药店信息管理系统
  • 【CSS】移动端适配
  • 【个人向】《HTTP图解》阅后小结
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • ERLANG 网工修炼笔记 ---- UDP
  • flutter的key在widget list的作用以及必要性
  • js继承的实现方法
  • JS数组方法汇总
  • JWT究竟是什么呢?
  • PHP的Ev教程三(Periodic watcher)
  • vue 配置sass、scss全局变量
  • 当SetTimeout遇到了字符串
  • 回顾 Swift 多平台移植进度 #2
  • 精彩代码 vue.js
  • 坑!为什么View.startAnimation不起作用?
  • 微信小程序开发问题汇总
  • 如何用纯 CSS 创作一个货车 loader
  • !$boo在php中什么意思,php前戏
  • #Lua:Lua调用C++生成的DLL库
  • (06)Hive——正则表达式
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (十) 初识 Docker file
  • (一)kafka实战——kafka源码编译启动
  • .net core开源商城系统源码,支持可视化布局小程序
  • .net6使用Sejil可视化日志
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .NET项目中存在多个web.config文件时的加载顺序
  • .pop ----remove 删除
  • ??在JSP中,java和JavaScript如何交互?
  • @Conditional注解详解
  • @Mapper作用
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [ai笔记4] 将AI工具场景化,应用于生活和工作
  • [BT]小迪安全2023学习笔记(第15天:PHP开发-登录验证)
  • [C\C++]读入优化【技巧】
  • [CTSC2014]企鹅QQ
  • [FFmpeg学习]从视频中获取图片
  • [hdu 1247]Hat’s Words [Trie 图]