反爬虫已经更新, 本篇文章不适用了

前言

很多人还是私信问我汽车之家口碑的问题,所以决定在写一篇汽车之家口碑的爬虫。

本着“授人以鱼不如授人以渔的原则”,我大体说一下思路吧,不提供完成的代码了。

正文


一,爬虫都是具有时效性的,我不知道反爬虫什么时候更新,所以失效以后,除非工作需要,否则我也一般会维护。

二,移动客户端网页一般比电脑的网页更好爬取,所以这次可以用汽车之家口碑的移动端网页,用电脑网页也可以,但是

需要在汽车之家论坛反爬虫的基础上在进行修改。比较麻烦。

三,以这篇口碑为例,

在网页上显示的最满意为下图所示


打开网页源代码后,为以下代码


其中的“控”被<spanstyle='font-family:myfont'>&#xee06;</span>替代,“保”被<spanstyle='font-family:myfont'>&#xec1c;</span>替代。

而我们真正需要的是&#xee06;和&#xec1c;。

下面简单说我从知乎搜到的解释一下:这并不是一种编码,而是叫做numeric character reference(NCR)(数字字元参引),数字取值为目标字符的 Unicode code point;以「&#」开头的后接十进制数字,以「&#x」开头的后接十六进制数字。我们用到的是后面的十六进制数字。比如“控”这个字的十六进制数字为:EE06。

然后再网页源代码里搜索“myfont”:

汽车之家 python爬虫 爬取汽车之家口碑数据_汽车之家

得到一个字体文件的url,直接在浏览器打开这个URL会自动下载一个字体文件,这是汽车之家自己编辑的一个字体文件,相当于对于Unicode字符集的一个扩充,把想替换的字放到这个字符集中,重新给字一个Unicode码,这样就可以起到加密的作用。

我们用FontCreate打开这个字体文件,可以看到如下这些字:

汽车之家 python爬虫 爬取汽车之家口碑数据_汽车之家_02


一共90个字加一个空格,我没有全部截图,主要是我们用的的EE06的这个“控”字。

通过多次查看这个字体文件,我发现这些字的排列顺序,和十六进制数字会变,但是字的总数和内容不会变,也就是这90个字随机排列。所以每解析一个页面,就需要重新下载一次这个页面的字体文件,用来对应。

Java解析这个字体文件需要用到org.apache.fontbox.ttf.TTFParser这个类,pom坐标为:

<dependency>
  <groupId>org.apache.pdfbox</groupId>
  <artifactId>fontbox</artifactId>
  <version>2.0.8</version>
</dependency>



Python的话用 from fontTools.ttLib import TTFont




大体就是这个思路。希望能帮到大家