看了爬取猫眼电影的教程
于是自己动手试了一下
网址:http://maoyan.com/board/4
![](https://img.haomeiwen.com/i3290281/b855251138538b1f.png)
![](https://img.haomeiwen.com/i3290281/d71195c72771e023.png)
简单分析下这网站 数据都放在源码里
1.requests.get 获取网站源码
2.pattern 正则匹配
3.write 写入文件
4.多进程运行 (大题小做 杀鸡用牛刀 纯属试试)
Github MaoYanTop100.py
Top100榜还是比较轻松的
心血来潮想试试其他榜单 如最受期待榜
按同样的思路来 结果懵逼了
数字进行了反爬虫加密
![](https://img.haomeiwen.com/i3290281/4ffadcaa7eaedeb0.png)
![](https://img.haomeiwen.com/i3290281/d845759405cf5109.png)
网页源代码中并没有本月新增想看XXX人和总想看XXX人的数字
只有一串class= stoneFont格式的乱码——红框位置
F12 也显示不出来
![](https://img.haomeiwen.com/i3290281/639375157a260ff8.png)
遂百度
原来这些数字经过动态加载字体后呈现的
简单的说就是数字通过字体呈现一定的样式,如“微软雅黑”
而我们无法直接获得数字 需要通过字体进行解密
反反爬虫
![](https://img.haomeiwen.com/i3290281/c85eb575e1f85125.png)
下载加载的字体 xxxx.woff 右键 copy like address
粘贴到新页面 即可下载
通过FontEditor打开
![](https://img.haomeiwen.com/i3290281/f913a6496790161f.png)
得到了相应乱码与数字的对应关系
观察网页源代码数字乱码与fonteditor中的乱码
![](https://img.haomeiwen.com/i3290281/6139d13428b01011.png)
发现网页中的乱码和fonteditor中的乱码 后四位是一样的
那么只要做前缀替换就行
思路
1、 获取下载网站font字体包 网页源代码中有相应的字体包 正则匹配下载
![](https://img.haomeiwen.com/i3290281/58def90d451330cd.png)
2、获取font字体包中导入fonteditor 观察得到乱码与数字的关系 (这里需手动设置对应关系 ),如“uniF7C5”对应数字“1”
3、每次登陆此网站 字体都会动态更新 先登陆一次 下载一个font作为baseFont
设置baseFont与数字的关系 两个列表 baseNumList和baseUniCode
下载新的字体newFont 比较baseFont和newFont的glyf属性
如相等则是同一数字 将newFont通过baseFont映射到数字上
将newUniCode如“uniF7C5”替换成“”
再查找网页源代码 进行替换 将“”替换成映射的明文数字上
4、之后就和爬取Top100榜的思路一模一样
![](https://img.haomeiwen.com/i3290281/69d7dfbc1e2e905f.png)
![](https://img.haomeiwen.com/i3290281/6e58d05ba02c8fbc.png)
总结下
最受期待榜的网页源代码进行了反爬虫加密——动态字体加载
重点就在如何将动态加载字体的UniCode转换成明文数字
![](https://img.haomeiwen.com/i3290281/84b9c36a135b626c.png)
![](https://img.haomeiwen.com/i3290281/b3722e4c8b74ad37.png)
![](https://img.haomeiwen.com/i3290281/a951e97816bfc1e9.png)
源码 Github
网友评论