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

看了爬取猫眼电影的教程 

于是自己动手试了一下 

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

Python爬虫-字体动态加载:猫眼电影Top100榜和最受期待榜爬取_第1张图片
Top100榜
Python爬虫-字体动态加载:猫眼电影Top100榜和最受期待榜爬取_第2张图片
爬取数据

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

1.requests.get  获取网站源码

2.pattern 正则匹配 

3.write 写入文件

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

Github MaoYanTop100.py

Top100榜还是比较轻松的 

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

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

数字进行了反爬虫加密

Python爬虫-字体动态加载:猫眼电影Top100榜和最受期待榜爬取_第3张图片
最受期待榜
Python爬虫-字体动态加载:猫眼电影Top100榜和最受期待榜爬取_第4张图片
最受期待榜源代码

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

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

F12 也显示不出来

Python爬虫-字体动态加载:猫眼电影Top100榜和最受期待榜爬取_第5张图片
F12

遂百度

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

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

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

反反爬虫

Python爬虫-字体动态加载:猫眼电影Top100榜和最受期待榜爬取_第6张图片
动态加载的字体

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

粘贴到新页面 即可下载

通过FontEditor打开 

Python爬虫-字体动态加载:猫眼电影Top100榜和最受期待榜爬取_第7张图片
fonteditor

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

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

Python爬虫-字体动态加载:猫眼电影Top100榜和最受期待榜爬取_第8张图片
比较

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

那么只要做前缀替换就行

思路

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

Python爬虫-字体动态加载:猫眼电影Top100榜和最受期待榜爬取_第9张图片

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

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

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

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

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

        将newUniCode如“uniF7C5”替换成“” 

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

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

Python爬虫-字体动态加载:猫眼电影Top100榜和最受期待榜爬取_第10张图片
Python爬虫-字体动态加载:猫眼电影Top100榜和最受期待榜爬取_第11张图片
部分代码

总结下

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

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

Python爬虫-字体动态加载:猫眼电影Top100榜和最受期待榜爬取_第12张图片
一出好戏Unicode
Python爬虫-字体动态加载:猫眼电影Top100榜和最受期待榜爬取_第13张图片
一出好戏明文数字
一出好戏数据提取

源码 Github

你可能感兴趣的:(Python爬虫-字体动态加载:猫眼电影Top100榜和最受期待榜爬取)