记一个有趣的爬虫思路

前一段时间有写过一个奇怪的爬虫,特写此文以记之。

分析

首先该站点使用了以下方式:

  • cookie 追踪
  • Web Font 替换

所以为了能够正常把我们需要的数据爬取下来,我们需要进行以下工作:

  1. 不知道其追踪 cookie 的用途,因此在尽可能的保证这个 cookie 是变动的前提下将内容爬取下来
  2. 对 Web Font 进行逆向处理得到一个逆代换表后对爬取得到的内容进行代换

这里顺便浅谈下该站点反爬方式的原理

这个站点的 cookie 追踪所产生的 cookie 是本地生成,我们完全可以查看算法。

虽然不知道这个站点是否会使用这个追踪 cookie ,但考虑到这个 cookie 的产生使用到了当前URL中的部分属性以及用户的环境。

根据这个站点的特性,用户访问页面是没法从同一个页面访问到所有页面的,如果这个 cookie 的值一直保持一个恒定值,那么可以怀疑这个用户使用了爬虫。

我们可以采取两种措施: 将这个算法应用到爬虫上或者直接交给浏览器进行。

Web Font 替换

该站点使用了一个自定义字体编码的 Web Font 对内容进行保护。这个 Web Font 看起来应该是全站所有用户通用的。 因此这个 Web Font 一旦逆出来的话可以解决整个站点的内容保护。

该站点字体格式为.woff,可以使用 FontForge 进行查看。

可以采取两种措施: 使用字体编辑器看着一个个抄出来、使用 OCR 。

方案

考虑到当时事情比较多到忙不过来了,遂决定不看算法直接让浏览器进行,思路如下:

浏览器使用tampermonkey,跑一个自定义脚本,控制翻页以及信息采集,进行工作如下:

  1. 获取当前页面基本信息
  2. 解析当前页面内容
  3. 将解析到的内容进行组织,上传到 Web Server 中 (JSON)
  4. 等待随机时间,触发翻页按钮的 click 事件

再做一个 Web Server 做一个 API 专门接受 tampermonkey 脚本回传的数据,进行存储,含有以下功能:

  1. 接收数据写入 DB
  2. 生成 HTML (分别导出逆向处理前后的版本)
  3. 导出为JSON文件

爬取过程中我们就可以对字体进行逆向操作了。

这里简单看了下这个 Web Font 的规模,发现并不是很大,因此直接手拆了。最后生成一个 HTML 文件,分为两栏,对这个逆映射进行校对即可。

Code

由于这个项目的特殊性,因此完成爬取与交付后已删除掉所有数据。