摘要:爬取微信公众号数据,并实现本地检索。
原文地址 mp.weixin.qq.com
这里记录了公众号作者 LEGALGEEK 整合已有技术及解决方案,从零搭建个人知识库系统的思路与步骤流程,拟采用小册的形式,陆续在本公众号推送,供具有近似需求的同学参考。
上期回顾:从0到1搭建个人知识库系统 ·(二)纸质资料电子化
本篇是《从0到1搭建个人知识库系统》整体解决方案的第三篇 · 公众号信息流剪藏与搜索,主要分享作者为实现知识资源管理集约化、索引化所进行的尝试。其核心内容包含五个层次:
- 1、将碎片知识编织成网
- 2、单篇图文的本地存储
- 3、历史消息的批量剪藏
- 4、让一切内容可被搜索
- 5、反思及可替代方案
信息在指尖流淌,而你却无可奈何,这是件可悲的事。
以微信公众号为代表的信息流类产品,是当前知识内容的重要载体,无数创作者在这里构筑自己的天地,记录时代反省内心,不断有内容产生、消失、被遗忘、被重新记起。
而屏幕前的我,宛如那只在动物园里一天看了十万名游客的猴子,习惯了形形色色,却无法记清一张具体的脸。那些曾经转发、收藏到各个角落的链接,终于无法继续被整理,那些曾经引发共鸣的碎片,糊成记忆里的一团马赛克…
一、结网 🛒
假设你近期希望构建一个 “数据合规知识库”,并且已经通过前文纸质文档电子化的方法扫描了一些专业书籍,但仍意犹未尽,因为你知道在公众号里可能有一些乐于分享的大咖写了不少高价值内容,希望能被收录进自己的专题知识库,并实现本地检索和分析,你该如何实现自己的想法?
这里可能有几个问题需要克服:
1、如何找到该领域活跃的内容输出者?
2、如何将公众号内容保存在本地?
3、如何实现内容关键词检索?
首先,找到一个领域的活跃知识分享者,最直接的做法是找个业内熟人问问,但这样的朋友不是人人都有,并且可能受其主观因素影响。
能否通过数据的方法解决该问题呢?
一个简单的方法是:对特定主题文章近 1 年的发文情况进行统计分析,这里以 ”数据合规“作为关键词,搜索标题内包含该词的推文,通过一些魔法(在下文第三部分详细介绍)拿到这批发布数据。
经过统计分析,可以得出发文数量靠前的微信公众号,这里我们选取其中典型代表,对历史文章信息进行整体获取。
二、镜像 🖨
构建知识库的第一步是完成数据采集,将文章数据拷贝到自己可控的位置,以便于查找、分析。
常见创建数据镜像的方式有以下几种:
收藏链接
定义:将文章链接保存在浏览器书签夹或者其他位置
优点:保留原始形态、操作简便
缺点:需在线访问、存在原始文件删除风险、超过一定体量后书签无法维护
全文复制
定义:将文章内容全选、复制粘贴到word或其他文件载体
优点:操作简便、可离线访问、内容可以复制检索
缺点:样式丢失、超过一定体量后文件无法维护
网页长截图
定义:使用浏览器插件( 例如 “FireShot” ) 将文章网页导出为长截图
优点:保留原始形态、可离线访问
缺点:内容无法复制检索、阅读体验不佳、超过一定体量后文件无法维护
另存为“PDF”
定义:在浏览器网页右键,选择打印为PDF
优点:操作简单、可离线访问
缺点:内容不易复制检索、阅读体验不佳、超过一定体量后文件无法维护
另存为“html”
定义:在浏览器网页右键,选择另存为网页html
优点:操作简单、可离线访问、内容可复制检索
缺点:样式可能丢失、下载的文件琐碎,超过一定体量后文件无法维护
另存为“单文件网页”
定义:将二进制文件格式将完整的网页保存到单个文件中,其中包含样式、图像、视频或音频以及所有需要的文件,即使计算机未连接到网络,也可以完全加载页面。
用法:针对Chrome浏览器,可以右键存储为单文件网页,也可以使用浏览器插件SingleFile,实现一键下载单文件网页
优点:可离线访问、接近原始形态、内容可复制检索
缺点:超过一定体量后文件无法维护
小结:以上不同方案,有各自的适用场景,从构建可检索、可阅读的知识库角度而言,需要满足的核心需求包含2个层面:
第一、满足人类阅读的需要,追求方便美观、操作简单
第二、满足机器阅读的需要,支持程序读取、批量分析
综合看,以单文件网页作为存档格式,可以兼顾以上两方面需求。
三、爬虫 🕷
困于微信公众号封闭生态,获取文章数据并非易事,但也绝非难事。
选项一:硬核的办法
实现自动化从微信公众号采集数据,就要用上爬虫知识,其中可能需要绕过各种限制,典型如:
1、使用 Fiddler、Charles 等网络调试工具,对微信客户端进行网络抓包,获取cookie 等必要访问参数。
2、使用 Python 下载工具库、格式转化工具库,请求、下载和转换数据。
3、使用 数据库,进行数据缓存、持久化。
4、使用 定时任务、定期休眠等访问策略,防止因短时间获取大量数据触发反爬虫风控机制造成封 IP 问题。
5、使用 异步任务机制,提升数据采集效率。
选项二:钞能力的办法
有需求的地方就有供给,你可以花点小钱换来自由。
在 Google 或 某宝,使用 “公众号文章采集” 等关键词,可以打开一片新天地,一站式解决问题还赠送售后服务。
于是,这世上可能没有啥技术难题,有的只是笨蛋和白嫖怪。
四、搜索 🔍
面对大量数据资料,可以使用搜索的方法代替文档管理。
于是问题的本质就变成:如何建立一个本地的全文搜索引擎,对非结构化数据建立索引,实现秒级响应的内容搜索服务。
同样的,建立这样一款自用的搜索引擎,并非易事,但也绝非难事。
选项一:硬核的方法
从 0 到 1 实现本地全文搜索引擎系统,主要技术栈:
后端:Python + Elasticsearch + Enterprise Search + Nginx
前端:VUE / React + UI框架
关键流程:
1、从第三步采集的离线 html 文件中,解析并提取文本内容;
2、将文本内容入 ES 库,同步设定 Schema、中文分词策略;
3、使用 Enterprise Search 快速完成搜索引擎权重、候选推荐服务搭建;
4、使用 前端框架 低成本完成搜索页面搭建;
5、使用 Nginx 部署前后端服务;
用企业级方案做个人服务,会有一种用大炮打蚊子的……爽感。
选项二:钞能力的办法
利用 DEVONthink 自动实现本地化全文索引、搜索功能。
关键流程:
1、把第三步采集的离线 html 文件夹,拖到 DEVONthink,软件会自动完成索引构建
2、使用 DEVONthink 自带搜索框,或者 Alfred、Raycast 等桌面全局搜索入口软件,实现快捷内容检索
五、更多 🔭
1、如果你恰好在使用 飞书 ,可以尝试使用剪存插件,以达到近似效果。
「 飞书剪存是一个兼容于各大浏览器的扩展程序。它可以将自动剥离广告后的网页正文一键保存至飞书云文档。」具体说明参见:
https://www.feishu.cn/hc/zh-CN/articles/606278856233#tabs0
往期精选