今天为大家带来的是爬虫之反爬措施中字体反爬的一个案例,起点网。具体来看下面的分析与代码。
首先参考的网站:https://www.qidian.com/all?&page=1
从网站中可以观察到,它的反爬是这样的:
再从网页源码中观察,发现又是这样的:
在观察网页后发现重复出现了一个较为特殊的标签 <style>,点开之后如下图所示:
发现原来这就是传说中的字体反爬!!ttf结尾的就是相应的字体文件。
好了,那么接下来就是观察字体文件,查看具体的数字是怎样的对应关系。
查看字体文件可下载fontcreater(自行百度。。),字体文件中显示如下:
哇。。so easy,这不就是英文字母对应其数字吗,所以先自定义一个字典(单词与数字的对应关系),用来映射该网站的其他字体库。
接下来,通过python库fonttools工具包,找出字体文件中包含的映射关系,代码如下:
from fontTools.ttLib import TTFont from io import BytesIO url_ziti = '字体文件地址'. ziti = requests.get(url_ziti) # 下载ttf字体文件,然后通过BytesIO转化为内存文件,使用TTFont处理 font = TTFont(BytesIO(ziti.content)) cmap = font.getBestCmap() cmap
映射关系如下图所示:
可以发现,上图中字典的键值与网页源码中的值是一致的,于是就可以通过相互映射的关系,找出这些源码最终代表的是那几个数字,我把两张图放在一起,方便大家理解:
可以看到100156对应数字1,100158对应数字6,依此类推,最后得到的数字是160.87,发现与网页中显示的一致。
这个案例到这就结束啦,总结一下:这里的反爬呢就是相互之间的映射关系,关键点在于寻找发现这种关系,主要通过两个工具,fontcreater和fonttools包,其次只需要映射出网页源码与真实数字即可。