一、所需工具

FontCreator

二、问题引入

我们用Chrome登录电影《死侍2》的主页,查看页面信息,会发现用户评分出现乱码两个方框:
再查看这个地方的html源代码:
是类似一个引用。这明显使用了某种反爬技术。
另外大家可以自行验证,这里的引用的16进制的编号,每次访问都是不一样的(或者是过几分钟再访问),同一个数每次访问可能对应不同的编号。

三、解决问题

这其实是使用的css3的新特性,继续查看源代码可以发现html中有这一段:
简单点理解就是,它这里的评分数字是用的图标的形式(iconfont),即在请求页面信息的同时,请求了一个字体文件(就是上图的那个请求woff的url),然后根据源码中的16进制编号,找到这个文件中对应的字体对象,再显示给用户。同时,每次请求的这个woff和评分位置的16进制编号并不唯一,意思就是说,它这个woff是动态的(即数字对象的编号是动态的),只要每次16进制的编号和woff文件中的对应就可以,这样实现了反爬的效果。

通过验证,会发现woff中数字对应的字体对象是不变的,只是每次访问的数字的编号在变化。(验证过程无非就是用fontTools.ttLib库中的TTFont.(“×××.woff”).saveXML(“×××.xml”),将woff保存为xml,打开亲自比对一下每个数的配置)

(至于iconfont的使用也非常简单,可以在https://www.iconfont.cn/下载几个矢量图标试一下。这里和爬虫没什么关系,就不再介绍。)

对此我们可以想到下面的策略:

  • 下载一个基准的woff文件a.woff(可以理解为woff文件中保存了编号与数字字体对象的对应),通过FontCreator工具打开,手动记录其中的编号与数字的对应关系,这时,就捆绑了 基准的 “编码—数字的字体对象—数字”。
  • 下载第二个woff文件b.woff和对应页面的编号,在代码中通过编号拿到了b.woff中对于的数字的字体对象,用这个对象依次与基准的十个字体对象比较,找到相同的一个,对应的基准数字及正确的数字。

四、代码实现

1、首先我先下载了一个woff文件,用FontCreator打开
这就作为基准的对应

2、为了方便演示,我打开另一部电影的主页,同时下载这个主页捆绑的woff文件,并记录它的评分及编号
它的编号为&#xe8da、&#xf587,分别是9、4
注意:这里的编号在各个地方的前缀不一致,代码中需要处理一下
在这里看到的是&#x
爬下来的html为\u
在woff中为uni
3、代码

from fontTools.ttLib import TTFont
base_num = dict()  # 编号—数字
base_obj = dict()  # 编号—对象
def init():# 注意,这里的编号与上面说的是一致的,只是前缀不一样,网页上看的是 &#x,爬下来的是\u,需要处理一下base_num["uniF290"] = "0"base_num["uniEA12"] = "1"base_num["uniED86"] = "2"base_num["uniED0D"] = "3"base_num["uniE60A"] = "4"base_num["uniEF1F"] = "5"base_num["uniEEBA"] = "6"base_num["uniEC5B"] = "7"base_num["uniF01B"] = "8"base_num["uniF6B0"] = "9"# 打开基准的woff文件BaseFontfile = TTFont('d2f5f7d50623609613eb8c0cddf472ac2080.woff')for key in base_num:base_obj[key] = BaseFontfile['glyf'][key]  # 获得woff内编号对应的字体对象def getRealNum(HexNum,woffFileName):fontFile = TTFont(woffFileName)obj = fontFile['glyf'][HexNum]for key in base_obj:  # 遍历找到相同的字体对象if obj == base_obj[key]:return base_num[key]if __name__ == '__main__':init()print(getRealNum("uniE8DA","9f14db7a2613e566981242118676d9d72080.woff"))print(getRealNum("uniF587", "9f14db7a2613e566981242118676d9d72080.woff"))

python爬取猫眼电影评分反反爬方式相关推荐

  1. 使用Requests库+re库爬取猫眼电影评分

    使用Requests库+re库爬取猫眼电影评分 作者:小胖 0x1: 分析 在简单的翻页中,我们可以知道.网页涵盖了以下几个规律 1.offset参数的值是除以30就是当前的页面 2.每个页面只有30 ...

  2. 爬取猫眼电影评分TOP100

    操作系统:macos python版本:3.6 现在查看猫眼电影的页面真实页面源码会自动跳转, 可以在火狐浏览器中查看开发者模式的Network监听组件中查看源码 根据源码来编写的正则表达式('< ...

  3. python爬取b站搜索结果_Python爬虫实例:爬取猫眼电影——破解字体反爬,Python爬虫实例:爬取B站《工作细胞》短评——异步加载信息的爬取,Python爬虫实例:爬取豆瓣Top250...

    字体反爬 字体反爬也就是自定义字体反爬,通过调用自定义的字体文件来渲染网页中的文字,而网页中的文字不再是文字,而是相应的字体编码,通过复制或者简单的采集是无法采集到编码后的文字内容的. 现在貌似不少网 ...

  4. Python爬虫实例:爬取猫眼电影——破解字体反爬

    字体反爬 字体反爬也就是自定义字体反爬,通过调用自定义的字体文件来渲染网页中的文字,而网页中的文字不再是文字,而是相应的字体编码,通过复制或者简单的采集是无法采集到编码后的文字内容的. 现在貌似不少网 ...

  5. python爬取猫眼电影评分

    直接上代码 import datetime import json from multiprocessing.dummy import Pool from time import localtime, ...

  6. python 抓取猫眼电影评分

    目标网页 完整代码: from selenium import webdriver from PIL import Image from io import BytesIO import time i ...

  7. 爬虫基本库request使用—爬取猫眼电影信息

    使用request库和正则表达式爬取猫眼电影信息. 1.爬取目标 猫眼电影TOP100的电影名称,时间,评分,等信息,将结果以文件存储. 2.准备工作 安装request库. 3.代码实现 1 imp ...

  8. 运用正则爬取猫眼电影流程

    一.爬虫爬取网站流程 1.分析网站的数据来源 ​ 分析网站结构,待爬取数据在哪. 2.查看页面数据能否通过requests模块获取到 ​ (1)在开发者工具中,找到页面的url对应的请求.通过这条请求 ...

  9. python战反爬虫:爬取猫眼电影数据 (一)(Requests, BeautifulSoup, MySQLdb,re等库)

    姓名:隋顺意 博客:Sui_da_xia 微信名:世界上的霸主 本篇文章未涉及猫眼反爬,主要介绍爬取无反爬内容,战反爬内容请去 python战反爬虫:爬取猫眼电影数据 (二)(Requests, Be ...

最新文章

  1. 2021年春季学期-信号与系统-第十四次作业参考答案-第四小题参考答案
  2. mysql 表空间收缩_【135期】谈谈MySQL中的重做日志,回滚日志,以及二进制日志的区别及各自作用...
  3. 代码重构阅读心得[转]
  4. 新冠肺炎疫情预测与防控策略评价
  5. java基础学不会_java基础
  6. 用C语言写ucos中断服务程序,在ARM处理器上移植uCOS II的中断处理
  7. MicroPython ESP32 读取DS18B20温度数据
  8. 强网杯2022 pwn 赛题解析——yakagame
  9. 有关爬虫加载Ajax数据或请求json数据集的(快速高效)方法
  10. 在计算机软件中怎么拍照,计算机相机相机软件,这三个软件不仅用于拍照
  11. cookie 和 sessions 的区别
  12. 论文图片排版 Adobe Illustrator 操作演示
  13. pentaho SPARK
  14. AI人工智能图片无损放大软件,这软件神了
  15. 【风靡全球年近40年的C++过时了吗?C++20来告诉大家】
  16. label标签的作用
  17. marquee实现文字无缝滚动+css无缝滚动
  18. SuSE zypper命令基本使用
  19. 被误删的手机短信息如何恢复?
  20. 【WPS】excel 启用宏 windows环境

热门文章

  1. 【游戏渲染】unity海边波浪效果的实现
  2. 移动端6种导航设计总结
  3. 几款主流的App统计工具解析:友盟、Talking Data、openinstall...
  4. 《经典食人花》windows经典桌面游戏食人花(吃花)登陆iOS,Android啦
  5. Web开发 web.xml中metadata-complete属性
  6. SIMO EMS 技术支持
  7. 人机交互的软件工程方法
  8. Bio-Helix丨Bio-Helix艾美捷100bp DNA ladder说明书
  9. MAC设置idea多个项目合并在tab栏显示
  10. Linux内核4.10在龙芯3A3000笔记本上的移植