我在尝试自建一套浏览记录保存和搜索的方案,有人愿意一起搞吗

2023-03-03 20:08:37 +08:00
 FrankAdler

前几天发过一个帖子,https://www.v2ex.com/t/919776 征集到了一些工具和已有的在线服务,折腾下来都不满意,但是意外的发现了有专门做主要内容提取的前端库,比如 mozilla 的 readability 。

我首先排除了手动保存、异步抓去(登录态动态加载的会失败),然后排除本地方案,因为有多台设备

我的现状是:

  1. 使用 singlefile 插件保存 html 到手搓的 webdav 服务
  2. webdav 服务会保存 html 到本地文件,同时提供一个类似 nginx 文件列表的界面查看文件,点击可以直接打开
  3. webdav 服务服务调用 readability 库提取 singlefile 生成 html 的主要内容、标题、原地址、文件路径提交到全文索引,这样能保证需要登录的和动态加载的也能提取到内容
  4. 全文索引使用 zincsearch ,一个 Go 开发的,类似 es 的轻量级索引,自带一个简易 webui 手动搜索找到文件路径和原地址

想做的是:

  1. webdav 保存文件+提交索引这块优化下,犹豫要不要使用数据库( sqlite 、mysql 等)记录状态,方便重建索引等
  2. readability 库是用 nodejs 写的,很多年没写 node 了,感觉现在写的代码不够好
  3. 尝试 readability 以外的内容提取库,比如 https://github.com/postlight/parser
  4. 基于 zincsearch 的数据提供一个类似搜索引擎的界面,功能需要:
    • 产品化的搜索界面,类似 https://demo.historio.us/search/ Google 这样,只是内容是私有的
    • 搜索后当前页面弹出预览,使用 readability 提取的内容(可能需要截断)
    • 搜索后跳转打开网页原地址
    • 搜索后跳转打开保存的 singlefile 生成的 html 文件(可能原地址失效了)
  5. 可能需要给 singlefile 提交一些功能 pr ,比如保存到 webdav 的时候提供更多的信息

所以需要支持的是:

  1. 前端&node:搜索界面开发,内容提取库开发或封装
  2. 熟悉 Go:相关接口开发,这块我自己就可以,帮忙 review 或者偶尔分担下
  3. 熟悉搜索:可能的话想基于 bluge 或 bleve 直接构建索引部分,减少一个组件
  4. 熟悉 chrome 扩展:singlefile webdav 部分功能定制(可能)或者直接向上游提 pr
  5. 其他:多提建议、试用

我会新建一个 github 组,用来放新写的代码,我也会把我已有的成果:webdav 、readability 封装开源出来,这些代码大概率需要重写。

做这些的初衷,就是想把浏览过的网页保存下来,方便以后万一需要再看(所以全文索引很重要),防止原地址失效,或者失去查看的权限和条件等。

希望不会被吐槽白嫖,以及需要征集项目和组名称。

6869 次点击
所在节点    程序员
60 条回复
iX8NEGGn
2023-03-03 20:53:23 +08:00
我也深度试用不止如下的项目:

ArchiveBox 、DiskerNet 、hunchly 、singleFile 、WAIL 、warcprox 、grab-site 、webscrapbook

Webrecorder 家族的:pywb 、archiveweb.page 、browsertrix-crawler 、browsertrix-cloud 、Conifer

没有一个能完全满足需求,目前正在用自己魔改的 webscrapbook 苟且着

需求如下

自动保存:
- 浏览过的页面
- 载入超过一定时间才保存页面(提供 delay 选项)
- 提供自动删除 n 天前且不在书签中的页面的功能
- 书签
- 保存书签时自动保存页面
- 删除书签时自动删除保存的页面(或是继续保留,等过 n 天后删除?)
- 提供 include 、exclude 规则,确定哪些页面需要保存,哪些不需要

搜索:
- 根据网页标题搜索
- 根据网页 URL 搜索
- 全文搜索(只提取网页正文建立索引)
- 搜索时可以根据添加时间限定等

其他:
- 相同的 url ,间隔一定的天数才重新保存?

- 相同的 url ,只有页面发送变化时才重新保存(如何认为页面发生变化?这很难判断)

- 锚点不同的链接是否被认为是不同的 url ?:
- 单页应用,不该被认为是相同的 url
- 普通应用,应该被认为是相同的 url

从头实现起来可能难,建议站在巨人肩膀上,以 singleFile 或 webscrapbook 为基础,救命稻草就等着 OP 你了
FrankAdler
2023-03-03 21:01:47 +08:00
@iX8NEGGn 你折腾过的比我还多,想法也比我多,真希望你能参与进来🥹
hamsterbase
2023-03-03 21:16:03 +08:00
试试看 hamsterbase ?


1. 本地部署,功能完全离线。 数据完全在本地。
2. 支持 API 、有开源的 SDK
3. 支持集成 singilefile 。
4. 支持批注、导出批注到 logseq 和 obsidian
5. 支持全文搜索。(基于 sqlite )
7. 提供 mac 、windows 、linux 桌面端、linux 服务端。 所有端之间点对点同步。支持离线独立运行。
hamsterbase
2023-03-03 21:24:28 +08:00
8 同时支持 singlefile 、webarchive 、mhtml 。 支持自动导入功能
9 支持暗黑模式。 暗黑模式下,网页自动暗黑。
10. 保存网页快照以后,支持解析出 title 、url ,文件大小。
11. 支持标签。已读未读、喜欢。
12. 按照 标签、导入时间、批注数、阅读状态、域名,是否喜欢 来筛选页面。 组合不同的筛选条件。
13. 筛选页面后,支持通过 rss 输出页面,集成 readability 。

下面是画饼阶段,马上会发布。

1. 开源的 chrome 插件, 支持直接在浏览器里批注,批注后自动保存快照(集成 singlefile )。 刷新页面后批注保留。
2. 支持把 webdav 作为后端,加密后同步
3. 独立运行的 iOS 、安卓客户端。(在 iOS 和 安卓里跑 nodejs )
4. docker 版适配 iOS 、安卓。
iX8NEGGn
2023-03-03 21:26:12 +08:00
@FrankAdler 奈何我只会点 JAVA ,Go 和 Js 技术不允许呀。

@hamsterbase 主要是想做浏览器无感保存,而不是手动添加网址或内容,如果能做到这一点就好了,大佬你的项目有这个功能吗?
hamsterbase
2023-03-03 21:27:41 +08:00
@iX8NEGGn 有啊, 绑定 singilefile 就好了。 singilefile 本身自带保存功能。

文档在这里 https://hamsterbase.com/zh/docs/integrations/singlefile.html
iX8NEGGn
2023-03-03 21:28:57 +08:00
@hamsterbase 我这就去深度体验
danbai
2023-03-03 21:31:44 +08:00
之前用浏览器插件实现了一个自动保存到服务端建立索引
FrankAdler
2023-03-03 22:31:50 +08:00
@hamsterbase 你这个是闭源的?可惜了
ChinaCN
2023-03-03 22:44:48 +08:00
码住,我也想要一个无感保存的,收藏夹已经有几千个网址了,都不知道我想要的东西在哪里了
Archeb
2023-03-03 22:47:35 +08:00
@iX8NEGGn 这个需求很吸引我,我也想要这样的东西,如果找到合适的方案了踢我一下。
bjzhush
2023-03-03 22:54:01 +08:00
有过类似想法,简单说说
如果所有浏览记录都保存了,那么搜索记录也就在里面了,简单匹配下就能匹配出来。
目前我是通过 Export Chrome History 这个 chrome 插件,每 80 多天把所有浏览记录导出一次( chrome 本地最长保存 90 天的浏览记录)
另外云端 google 也有记录,在 https://myactivity.google.com/myactivity?pli=1
Google 数据都是可以导出的,这个应该也是可以导出的,不过好像不是那么全
woyaojizhu8
2023-03-04 11:24:15 +08:00
recoll 是一个本地全文搜索工具,它可以保存浏览历史记录,可以对浏览过的网页进行全文搜索。关键它将历史记录全文搜索集成到桌面搜索中了。
woyaojizhu8
2023-03-04 12:26:15 +08:00
@iX8NEGGn 请问你魔改的 webscrapbook 实现了你所说的所有需求了吗?
woyaojizhu8
2023-03-04 13:10:04 +08:00
@FrankAdler #2 是不是在 github 上建一个项目会更有条理,更利于合作
iX8NEGGn
2023-03-04 13:18:10 +08:00
@woyaojizhu8 虽然功能上差不多能满足,但做法并不优雅,且它还带有网页标记等功能,项目挺复杂的,继续改成我想要的样子可能比我重新写一个后端配合上 SingleFile 还要难,所以并不打算继续弄下去,还在等替代品。
woyaojizhu8
2023-03-04 13:37:54 +08:00
@iX8NEGGn 搜索需求用 recoll+webscrapbook 可以实现。webscrapbook 包括网页标题 网页 url 等元数据。而 recoll 经过配置可以索引这些元数据。自动保存的话 ,大概只能魔改 webscrapbook ?
iX8NEGGn
2023-03-04 13:52:45 +08:00
@woyaojizhu8 想要的是一个优雅的 All In One 程序,包括自带搜索功能,直接提供一个友好 Http 界面,而不需要启动其他程序,其实 webscrapbook 已经提供搜索功能且提供 Http 界面,但是它直接把提取的网页 content 记录在一个 Js 文件内,我不知道它是否有算法加持来执行全文搜索,还是直接暴力匹配,如果数据量大了不知道它是否还能支撑起来。
xiguaprince
2023-03-04 13:53:21 +08:00
嗯…我已经做了个自用的这种小工具…
woyaojizhu8
2023-03-04 13:56:45 +08:00
@xiguaprince 能分享下工具吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/920931

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX