记一个有趣的爬虫思路
前一段时间有写过一个奇怪的爬虫,特写此文以记之。
分析
首先该站点使用了以下方式:
- cookie 追踪
- Web Font 替换
所以为了能够正常把我们需要的数据爬取下来,我们需要进行以下工作:
- 不知道其追踪 cookie 的用途,因此在尽可能的保证这个 cookie 是变动的前提下将内容爬取下来
- 对 Web Font 进行逆向处理得到一个逆代换表后对爬取得到的内容进行代换
这里顺便浅谈下该站点反爬方式的原理
cookie 追踪
这个站点的 cookie 追踪所产生的 cookie 是本地生成,我们完全可以查看算法。
虽然不知道这个站点是否会使用这个追踪 cookie ,但考虑到这个 cookie 的产生使用到了当前URL中的部分属性以及用户的环境。
根据这个站点的特性,用户访问页面是没法从同一个页面访问到所有页面的,如果这个 cookie 的值一直保持一个恒定值,那么可以怀疑这个用户使用了爬虫。
我们可以采取两种措施: 将这个算法应用到爬虫上或者直接交给浏览器进行。
Web Font 替换
该站点使用了一个自定义字体编码的 Web Font 对内容进行保护。这个 Web Font 看起来应该是全站所有用户通用的。 因此这个 Web Font 一旦逆出来的话可以解决整个站点的内容保护。
该站点字体格式为.woff
,可以使用 FontForge 进行查看。
可以采取两种措施: 使用字体编辑器看着一个个抄出来、使用 OCR 。
方案
考虑到当时事情比较多到忙不过来了,遂决定不看算法直接让浏览器进行,思路如下:
浏览器使用tampermonkey,跑一个自定义脚本,控制翻页以及信息采集,进行工作如下:
- 获取当前页面基本信息
- 解析当前页面内容
- 将解析到的内容进行组织,上传到 Web Server 中 (JSON)
- 等待随机时间,触发翻页按钮的 click 事件
再做一个 Web Server 做一个 API 专门接受 tampermonkey 脚本回传的数据,进行存储,含有以下功能:
- 接收数据写入 DB
- 生成 HTML (分别导出逆向处理前后的版本)
- 导出为JSON文件
爬取过程中我们就可以对字体进行逆向操作了。
这里简单看了下这个 Web Font 的规模,发现并不是很大,因此直接手拆了。最后生成一个 HTML 文件,分为两栏,对这个逆映射进行校对即可。
Code
由于这个项目的特殊性,因此完成爬取与交付后已删除掉所有数据。