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

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

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 .

这会拉取zhi-archive(playwright)的镜像,注意你的网络环境。

配置环境变量

现在支持0配置启动,你若是只想在本机试用本项目,可以忽略这一步

但是当部署在云服务器上并暴露API端口时,强烈建议配置.apienv启用接口认证。

所有可配置项见config.py

支持通过环境变量或.env.apienv文件配置

.env文件

secret_key=  # 请生成一个随机字符串

.apienv文件

# API认证账号,配置用户名和密码
enable_auth=true
username=
password=
启动

docker 新版本可以直接使用docker compose替换docker-compose

常规方式
docker-compose up -d

这会为每个worker启用一个容器,同时运行一个redis实例。

单独部署redis

若你想单独部署redis,可以使用docker-compose2.yaml,需要通过环境变量或.env文件配置redis,如:

redis_host=172.17.0.1
redis_port=6379
redis_passwd=apassword

启动服务:

docker-compose -f docker-compose2.yaml up -d

API端口为9090,以127.0.0.1为例,
打开http://127.0.0.1:9090/docs可查看接口文档。

若你启用了接口认证,调用接口之前请先打开http://127.0.0.1:9090/auth/login登录获取本项目的接口认证信息(Cookies)

初始化
  1. 登录知乎获取Cookie

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

    扫码完成登录后将自动应用获取的Cookie并重定向到配置页面http://127.0.0.1:9090/zhi/core/config:

  2. 配置页

    states/46edded3d9319648da5a.state.json即保存的cookies文件,上一步登录成功后自动设置,所以如果你有该文件,也可以不登录直接设置为你的文件路径。

    在这里插入图片描述

    Monitor默认每5分钟监测一次,配置项含义见config.py

运行Monitor和Archiver

Monitor和Archiver默认是暂停状态,通过配置页的归档Archiver配置监控Monitor配置 更改people为你想要监控的知乎用户名,通过下方的切换状态按钮可以控制运行状态,注意观察日志文件的输出。

已知问题

  1. 即使是无头模式,Chromium浏览网页和截图时占用内存依然较高,在低内存的云服务器上可能会崩溃(需要数百MB,最好通过docker的--memory限制下,参考docker-compose2.yaml
  2. 超长的回答/文章可能会截图失败(playwright抛出错误),经测试内存越大能截的图越长

TODO

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

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

  • 25
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值