Python爬虫-字体动态加载:猫眼电影Top100榜和最受期待榜爬取

网络爬虫

浏览数:110

2019-8-25

AD:资源代下载服务

看了爬取猫眼电影的教程 

于是自己动手试了一下 

网址:http://maoyan.com/board/4

Top100榜
爬取数据

简单分析下这网站 数据都放在源码里

1.requests.get  获取网站源码

2.pattern 正则匹配 

3.write 写入文件

4.多进程运行 (大题小做 杀鸡用牛刀 纯属试试)

Github MaoYanTop100.py

Top100榜还是比较轻松的 

心血来潮想试试其他榜单 如最受期待榜

按同样的思路来 结果懵逼了 

数字进行了反爬虫加密

最受期待榜
最受期待榜源代码

网页源代码中并没有本月新增想看XXX人和总想看XXX人的数字 

只有一串class= stoneFont格式的乱码——红框位置

F12 也显示不出来

F12

遂百度

原来这些数字经过动态加载字体后呈现的

简单的说就是数字通过字体呈现一定的样式,如“微软雅黑”

而我们无法直接获得数字 需要通过字体进行解密

反反爬虫

动态加载的字体

下载加载的字体  xxxx.woff 右键 copy like address 

粘贴到新页面 即可下载

通过FontEditor打开 

fonteditor

得到了相应乱码与数字的对应关系

观察网页源代码数字乱码与fonteditor中的乱码

比较

发现网页中的乱码和fonteditor中的乱码 后四位是一样的

那么只要做前缀替换就行

思路

   1、 获取下载网站font字体包 网页源代码中有相应的字体包 正则匹配下载

    2、获取font字体包中导入fonteditor 观察得到乱码与数字的关系 (这里需手动设置对应关系 ),如“uniF7C5”对应数字“1”

   3、每次登陆此网站 字体都会动态更新 先登陆一次 下载一个font作为baseFont

        设置baseFont与数字的关系 两个列表 baseNumList和baseUniCode

        下载新的字体newFont  比较baseFont和newFont的glyf属性

        如相等则是同一数字  将newFont通过baseFont映射到数字上 

        将newUniCode如“uniF7C5”替换成“&#xf7c5” 

        再查找网页源代码 进行替换 将“&#xf7c5”替换成映射的明文数字上

 4、之后就和爬取Top100榜的思路一模一样


部分代码

总结下

最受期待榜的网页源代码进行了反爬虫加密——动态字体加载

重点就在如何将动态加载字体的UniCode转换成明文数字

一出好戏Unicode
一出好戏明文数字
一出好戏数据提取

源码 Github

作者:丨像我这样的人丨