前几天发过一个帖子,https://www.v2ex.com/t/919776 征集到了一些工具和已有的在线服务,折腾下来都不满意,但是意外的发现了有专门做主要内容提取的前端库,比如 mozilla 的 readability 。
我首先排除了手动保存、异步抓去(登录态动态加载的会失败),然后排除本地方案,因为有多台设备
我会新建一个 github 组,用来放新写的代码,我也会把我已有的成果:webdav 、readability 封装开源出来,这些代码大概率需要重写。
做这些的初衷,就是想把浏览过的网页保存下来,方便以后万一需要再看(所以全文索引很重要),防止原地址失效,或者失去查看的权限和条件等。
希望不会被吐槽白嫖,以及需要征集项目和组名称。
1
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 你了 |
2
FrankAdler OP @iX8NEGGn 你折腾过的比我还多,想法也比我多,真希望你能参与进来🥹
|
3
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 服务端。 所有端之间点对点同步。支持离线独立运行。 |
4
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 、安卓。 |
5
iX8NEGGn 2023-03-03 21:26:12 +08:00
@FrankAdler 奈何我只会点 JAVA ,Go 和 Js 技术不允许呀。
@hamsterbase 主要是想做浏览器无感保存,而不是手动添加网址或内容,如果能做到这一点就好了,大佬你的项目有这个功能吗? |
6
hamsterbase 2023-03-03 21:27:41 +08:00
@iX8NEGGn 有啊, 绑定 singilefile 就好了。 singilefile 本身自带保存功能。
文档在这里 https://hamsterbase.com/zh/docs/integrations/singlefile.html |
7
iX8NEGGn 2023-03-03 21:28:57 +08:00
@hamsterbase 我这就去深度体验
|
8
danbai 2023-03-03 21:31:44 +08:00 via Android
之前用浏览器插件实现了一个自动保存到服务端建立索引
|
9
FrankAdler OP @hamsterbase 你这个是闭源的?可惜了
|
10
ChinaCN 2023-03-03 22:44:48 +08:00
码住,我也想要一个无感保存的,收藏夹已经有几千个网址了,都不知道我想要的东西在哪里了
|
12
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 数据都是可以导出的,这个应该也是可以导出的,不过好像不是那么全 |
13
woyaojizhu8 2023-03-04 11:24:15 +08:00
recoll 是一个本地全文搜索工具,它可以保存浏览历史记录,可以对浏览过的网页进行全文搜索。关键它将历史记录全文搜索集成到桌面搜索中了。
|
14
woyaojizhu8 2023-03-04 12:26:15 +08:00
@iX8NEGGn 请问你魔改的 webscrapbook 实现了你所说的所有需求了吗?
|
15
woyaojizhu8 2023-03-04 13:10:04 +08:00
@FrankAdler #2 是不是在 github 上建一个项目会更有条理,更利于合作
|
16
iX8NEGGn 2023-03-04 13:18:10 +08:00
@woyaojizhu8 虽然功能上差不多能满足,但做法并不优雅,且它还带有网页标记等功能,项目挺复杂的,继续改成我想要的样子可能比我重新写一个后端配合上 SingleFile 还要难,所以并不打算继续弄下去,还在等替代品。
|
17
woyaojizhu8 2023-03-04 13:37:54 +08:00
@iX8NEGGn 搜索需求用 recoll+webscrapbook 可以实现。webscrapbook 包括网页标题 网页 url 等元数据。而 recoll 经过配置可以索引这些元数据。自动保存的话 ,大概只能魔改 webscrapbook ?
|
18
iX8NEGGn 2023-03-04 13:52:45 +08:00
@woyaojizhu8 想要的是一个优雅的 All In One 程序,包括自带搜索功能,直接提供一个友好 Http 界面,而不需要启动其他程序,其实 webscrapbook 已经提供搜索功能且提供 Http 界面,但是它直接把提取的网页 content 记录在一个 Js 文件内,我不知道它是否有算法加持来执行全文搜索,还是直接暴力匹配,如果数据量大了不知道它是否还能支撑起来。
|
19
xiguaprince 2023-03-04 13:53:21 +08:00 via iPhone
嗯…我已经做了个自用的这种小工具…
|
20
woyaojizhu8 2023-03-04 13:56:45 +08:00
@xiguaprince 能分享下工具吗
|
21
woyaojizhu8 2023-03-04 13:57:37 +08:00
@iX8NEGGn 所以我的建议是用 recoll 来索引搜索,webscrapbook 仅保存
|
22
iX8NEGGn 2023-03-04 14:07:58 +08:00
@woyaojizhu8 仅保存的话 SingleFile 也能满足,但是多个不相干的软件配合使用,有割裂感。
而且还要整合管理功能才行,比如自动删除问题、重复页面问题,搜索到结果后点一下能直接看到带有 CSS 的原始页面,而不需要手动点击打开 Html 文件。 |
23
woyaojizhu8 2023-03-04 15:13:28 +08:00
@iX8NEGGn 不太可能有刚好符合你要求的软件,功能对于你的需求来说不多不少刚刚好,除非这软件是你自己写的。但是如果对于自己的各种需求都自己造轮子,那这工作量也太大了,所以用各种软件来组合是最好的,即使它们多出一些用不到的功能,甚至用不到的功能比用得到的功能还多,我觉得也不是啥大问题。而 recoll 跟 webscrapbook 配合,使用割裂感我感觉是比较弱的,或者说恰好在联系比较弱的两个功能模块(搜索跟保存)之间进行了割裂,分给了两个软件。
|
24
woyaojizhu8 2023-03-04 15:13:55 +08:00
@iX8NEGGn >搜索到结果后点一下能直接看到带有 CSS 的原始页面,而不需要手动点击打开 Html 文件。
没看懂,这是什么意思?这两者之间有什么区别? |
25
FrankAdler OP @woyaojizhu8 暂不考虑本地、单机的方案
|
26
FrankAdler OP >搜索到结果后点一下能直接看到带有 CSS 的原始页面,而不需要手动点击打开 Html 文件。
没看懂,这是什么意思?这两者之间有什么区别? 使用 readability 这类库,可以提取页面的主页内容,隐藏其他的信息,比如对于现在这个帖子,导航、右侧、评论、底部注脚都可以剔除,只保留帖子内容这块,而且还有不太简陋的样式,适合预览 |
27
FrankAdler OP @woyaojizhu8 临时
新建了一个空项目,https://b64s.uk/.1N-MUXfbIS0dIN6Mz9obYSpeXJvZ29uM2iqd3SwdoluAX5obX5m 在有人参与讨论前,我先不动手编码,暂且继续保持自己的方案 |
28
xitler 2023-03-04 22:47:06 +08:00
听起来很有意思,前端和 chrome 插件或许可以帮忙
|
29
woyaojizhu8 2023-03-05 00:19:53 +08:00
@FrankAdler # 25 recoll 可以实现多机。recoll 装一台 Linux 机子上,其他机子只装 recoll 浏览器扩展,通过 recoll webui 访问搜索
|
30
FrankAdler OP @xitler 留个联系方式吧,或者加我 tg
|
31
FrankAdler OP 目前跟一个前端小伙伴一起,打算先开始了,希望后续还有人加入进来
|
32
FrankAdler OP 已经有两个前端的小伙伴了 😄 后端目前只有我自己
|
33
dannylin 2023-03-28 00:11:50 +08:00 1
我是網頁剪貼簿( WebScrapBook ,WSB )的開發者,最近碰巧看到這個帖,也說點想法。
樓主提到的功能 WebScrapBook + PyWebScrapBook 應該足以解決,因為二者本來就是集擷取、管理、加註、檢索、跨裝置存取的方案: - 網頁擷取:有 - 儲存到遠端伺服器:有 - 多點存取:可以。能安裝 WSB 的瀏覽器都可以存取;不能安裝的也可以透過靜態索引頁面存取,或透過動態 Web 界面做有限度的編輯。 - 全文檢索:可以。而且支援的檢索條件相當豐富,比如在任意一或多本剪貼簿中檢索、限定在任意多個節點下檢索、RegExp 匹配檢索等等。 如果手上都是 SingleFile 擷取的網頁,PyWSB 也提供命令列工具匯入到 WSB 。(參見:wsb convert file2wsb -h ) 順便說下儲存格式,在 WSB 的文件就有[分析過]( https://github.com/danny0838/webscrapbook/wiki/FAQ-(zh_TW)#%E5%A6%82%E4%BD%95%E9%81%B8%E6%93%87%E6%93%B7%E5%8F%96%E7%B6%B2%E9%A0%81%E7%9A%84%E5%84%B2%E5%AD%98%E6%A0%BC%E5%BC%8F)。我個人使用上幾乎都是擷取為資料夾包 HTML+資源檔,只在極少數情況使用單一 HTML 或 MAFF 等壓縮格式,主要理由是: 1. 資料放在伺服器上透過瀏覽器瀏覽時,這種形式效能最好。加註、編輯、回存、或全文檢索時也是如此。(比如全文索引器只要爬 HTML 檔就好,單一 HTML 檔案卻得連無關的肥大 base64 資料一起爬過) 2. 最容易與版控系統整合。我可以不定時把資料丟進 Git 版控,隨時比對差異或復原毀損資料。單一 HTML 內嵌太多可能是重複的 base64 ,會讓資料庫變肥,也不利差異比對。 3. 單一 HTML 先天就無法記錄多個互相連結的網頁,所以像深層擷取、合併擷取都是只有 WSB 才支援的功能。 |
34
dannylin 2023-03-28 00:16:39 +08:00
至於 @iX8NEGGn 提到的幾點:
1. 關於全文檢索: 如前所述,全文檢索本來就有提供,為了支援靜態頁面等相容性考量,目前是做成客戶端檢索,也就是要先下載所有全文快取再開始檢索。 至於資料量很大的情況,要看網路和機器。如果後端架在本地,一般不會有太太問題;如果架在遠端,以目前的網路條件,下載數十 MB 的全文快取也不是太大問題。 作為參考,我個人的一個主要剪貼簿有約 27 年的資料,總計約 3 千個項目,10 萬個檔案,2.0GB ,全文快取 54MB 。伺服器架在遠端的情況下,電腦檢索並不會有太大的延遲( nginx 傳送全文快取資料會自動壓縮,大概只剩 26MB 左右),手機會稍微慢些,不過問題應該不在網速,而在手機處理器的性能。 如果擔心下載全文快取吃光流量,WSB 套件有提供限制快取大小的功能,行動端可以拒絕載入太大的全文快取(仍可以用標題、時間等其他條件檢索)。 PyWSB 支援多剪貼簿,每個剪貼簿都有獨立的快取。可以把常用資料集中在幾本剪貼簿,不常用的放到其他幾本,平時只在前者檢索,就可以極小化載入不必要的快取的效能問題。 未來可能會考慮實做伺服端的全文檢索,這樣客戶端就不必下載整個全文快取了。 如果還有餘裕,或許可能會實做支援 js 以外的全文索引格式,以應付不同需求。 2. 關於自動擷取與書籤整合: 我個人很少用自動擷取,因為無差別擷取瀏覽的頁面作用不大,絕大多數資料都不會用到,徒然影響效能和空間;而 Web 應用如 SNS ,也很難用自動擷取抓到想要的內容。但如果要用,可以設定擷取到獨立的剪貼簿,和常用資料分開,把干擾減到最小。 與書籤整合也是。就我個人的使用方式而言,書籤通常是用於記錄某些常去的「網站」,而剪貼簿則是記錄「網頁」,兩者本質上就不同,也就不會發生既要加書籤又擷取的情況。而對於想暫時記著的「網頁」,WSB 也有擷取成書籤項目的功能。 我個人無法理解為什麼要既加書籤又自動擷取,還要書籤刪除後同步刪除擷取?那和直接擷取並用特定剪貼簿/資料夾分類有何區別? 無法理解的需求,我大概也不會不會考慮實做。如果真的想做,可以考慮寫成另一個瀏覽器套件,以便提供瀏覽器書籤整合,也可以透過 external message 接入 WSB 套件和 PyWSB 做到自動擷取。 至於像自動刪除過時資料之類的功能,可以另寫套件接入 PyWSB 處理。或者也可以考慮寫成 cron job 。 未來 PyWSB 可能會實做剪貼簿 CRUD 的 Python 模組、命令列、及 web API 接口。到時寫第三方工具應該會更方便。 說是這樣說,但現在還有太多工作,實做那些可能是很久以後了。如有高手感興趣,倒是歡迎加入開發行列。😊 |
35
FrankAdler OP @dannylin 我会深入调研下 WebScrapBook 这个项目,6 年+的项目了还在维护,佩服
|
36
FrankAdler OP @dannylin 感觉我想做的和你说的不太一样,我其实是想放弃书签,然后无差别的记录(会个别性的排除某些域名,singlefile 有这个功能,虽然不太好用),等以后想起来需要的时候,直接用关键词搜索,我看了下现有的数据,每天大概 200-300 个左右的 html 文件产生,差不多每个月 5G 左右的数据量,每个文件在 1M 以下,个别因为有图片会比较大,可能需要将来想办法处理掉。
然后搜索,我是寄希望于类似 ES ,甚至 Google 、Baidu 这样的完整的搜索引擎,数据在远端,本地像浏览网页一样的,搜到相关内容,点击查看原始网页(内容可能更新或失效了)或者查看当时保存下来的单体 html |
37
iX8NEGGn 2023-03-28 03:29:08 +08:00
@dannylin “我個人無法理解為什麼要既加書籤又自動擷取,還要書籤刪除後同步刪除擷取?那和直接擷取並用特定剪貼簿/資料夾分類有何區別?”
之所以有这样的需求,是因为网页是我主要学习来源,我学习一个东西一般要学透,可能会打开几百甚至几千个网页,而且一开打就是几周甚至几个月,直到我学透并把所有的知识消化整理成我的笔记。 但有时,我不得不放下当前的学习去做其他的事情,因此我会一键收藏所有打开的页面到书签,可能会很长时间后我才能重新回来,但常常发现书签中的链接 404 了,这非常的难受,因为有些知识是我已经消化过了的,只是没来得及做笔记。 如果浏览的时候自動擷取了,一键收藏所有打开的页面到书签时就不会有太大的压力,而且浏览时擷取的成功比较高,那些自動擷取的网页经过一段时间后如果没有被收藏到书签,那么就应该把它们删除。当我把知识整理成我的笔记后,书签就没有用了,删除书签时应该把擷取的网页也删除。 |
38
dannylin 2023-03-28 08:20:32 +08:00
@iX8NEGGn 原來如此,你的想法相當於實做特定連動關係,這個的確是我們不太可能去為個別需求實做的。
如果要用比較符合目前框架下的做法,你可以考慮這樣做: 1. 設定自動擷取的頁面統一儲存到特定剪貼簿 X 。 2. 把「一鍵收藏到書籤」改成「一鍵擷取為 WebScrapBook 書籤」,假設擷取到特定剪貼簿 Y 。 3. 寫一個 cron tab 腳本,以一定頻率(例如每天)執行: (1) 鎖定所有剪貼簿 (2) 檢查 X 內的每筆資料,若建立時間超過 n 天,且在 X 以外的剪貼簿中沒有相同來源網址的項目,就刪除。 (3) 解鎖 cron tab 腳本建議用 Python 寫,可以一定程度上調用 PyWSB 現有的 API 。 |
39
iX8NEGGn 2023-03-28 11:07:32 +08:00 via iPhone
@dannylin 保存书签时自动擷取,我简单修改 WebScrapBook 很容易就做到了,只需监听 bookmark create 事件,然后调用已有函数。
至于删除,PyWSB 比较复杂,我无从下手,我非常暴力的直接读取谷歌浏览器书签文件和 PyWSB 生成的 js 文件进行对比,然后删除网页文件以及重新生成 js 内容。 经过这两步操作,几乎满足了我的所有需求,还有一个没满足就是:“相同的 url ,间隔一定的天数才重新保存”,好像 WebScrapBook 在检查规则的 duplicate 时 PyWSB 没有返回创建时间相关信息,所以我无法做到,您是否考虑添加这个功能?或者能否告诉我后端该修改哪里? 最后感谢大佬开源了这么优秀的项目,同时期待 PyWSB 后端做全文搜索以及提供 CRUD 的 API 的那一天。 |
40
dannylin 2023-03-28 22:20:43 +08:00
@iX8NEGGn 魔改套件是你的權利,不過自製套件在安裝使用上可能會遇到簽署、上架之類的麻煩;而官方套件更新後要同步跟進也會比較麻煩。一般還是會比較推薦兩種模式:(1)推動官方實做;(2)另外做一個自製套件介接。當然,後兩者可能也會需要不少討論和妥協,最後還是看你的意願。如果你願意,或許可以把程式碼也開源出來及到我們的 issue tracker 發議題討論,這樣我們在考慮是否增加新功能或提供更多套件間介接用 API 也會比較有東西可以參考。
關於「相同 URL 若間隔一段時間後允許重複擷取」,目前沒有實做。當初設計自動擷取功能是參考舊版 ScrapBook AutoSave Add-on ,並沒有考慮更多可能的觸發條件,要把這些考慮進去,不做一番魔改看起來不太可能。其實當初我們就很猶豫是否要內建自動擷取,也許最終還是提供更多 API ,然後像舊版 ScrapBook 一樣把自動擷取功能整個獨立成另一個套件比較合適吧。XD |
41
dannylin 2023-05-01 00:43:13 +08:00 1
@iX8NEGGn 更新一下。目前已初步完成 WebScrapBook/PyWebScrapBook 2.0 測試版,主要支援伺服端搜尋及改進資料傳輸方式,也提供了不少新 API 。有興趣請參見相關討論串: https://github.com/danny0838/PyWebScrapBook/issues/65
|
43
Jzdoxc 2023-05-21 13:54:08 +08:00
挺有意思的,毕竟互联网的信息也许会被删除掉,能够本地保存一下十分有必要的
还有仓库的短链地址过期了,能再给个链接吗,我 star 关注一下 |
44
FrankAdler OP @Jzdoxc
惭愧,因为事多,所以进度比较缓慢,等架子完全搭起来应该就会加快了: https://b64s.uk/.1n.5ns6bIS0dIN6Mz9obYSpeXJvZ29uM2iqd3SwdoluAX5obX5m |
45
zsxing5566566 2023-10-21 20:54:27 +08:00
大佬。进展如何?我一直用 archivebox ,但是这个好像没有用户名验证。部署在 vps 之后。大家都可以访问。数据也是一个问题。几百个网页之后,数据以 GB 计算。数据保存也是个问题。最大的问题就是索引了。好像有一些开源的搜索引擎 zincsearch 之类可以使用。
数据保存之后用 zincsearch 之类的搜索引擎分析数据是可行的么? 能在必要的网页文件上做注释么? 大佬?能再发下群?好像链接都失效了? |
46
FrankAdler OP @zsxing5566566 后端部分进度差不多 50%吧,前端部分进度 0%,说帮忙做前端的 v 友近期有点忙,我又不太熟。
|
47
zsxing5566566 2023-10-22 20:02:27 +08:00
大佬发下链接?
|
48
FrankAdler OP |
49
AppServes 260 天前
@FrankAdler 大佬,再更新下链接? 失效了哇
|
50
Jzdoxc 248 天前
我想参与这个项目,可以做一些后端部分的工作
|
51
FrankAdler OP |
52
Jzdoxc 248 天前
提了一个 PR ,up 有时间看看呢,顺便方便的话,留个 tg 联系方式或者群组链接
|
53
FrankAdler OP @Jzdoxc 看到了,pr 有点大啊,我 tg https://b64s.uk/.15!wQv8jQA0lQV6Uh90Uv1uU0WhIFAymMDg
|
54
AppServes 225 天前
@FrankAdler 最近没上线,链接还是失效了,可以更新一下吗,麻烦了。
|
55
AppServes 201 天前
@FrankAdler 上次看就是过期的了,最近一直在线,方便再更新下吗
|
56
FrankAdler OP |
57
AppServes 200 天前
@FrankAdler OK ,看到了
|
58
mrzhu 195 天前
@hamsterbase #6 官网没写购买后的高级功能是什么?最好写一下吧,哪些功能是免费,哪些需要付费
|
59
cyoking 55 天前
有最新的 github 地址么
|