反爬虫策略之font-face
在互联网快速发展的时代里,爬虫可以说是无处不在。各类热搜以及热点新闻,时时刻刻都在被爬虫获取。如果开发者并不想让内容大范围传播呢?如何应对爬虫呢?常见的方法有验证码验证,以及对频繁登陆ip进行屏蔽,除此之外,还有一种通过font-face自定义字体的方式,可以让爬取到的内容和网页显示的内容完全不一样,从而产生一种是否爬错内容了的感觉。
1.font-face介绍:
谈到font-face,也许很多人并不熟悉,但是说到应用此技术的公司,大家肯定都很熟悉了,58同城,猫眼电影等,都采用了font-face策略来应对爬虫。以58同城为例,打开审查元素,发现页面内的3室2厅1卫 和120㎡中的数字均变成了乱码 ----“驋室麣厅龒卫”,“龒麣龤㎡”。所以即便爬虫找到了正确位置,也依然无法获得正确信息。
2.font-face原理:
仔细观察审查元素信息,在styles栏里发现了font-family,这就是自定义字体,可以把乱码显示成正常的数字。
于是我们要找到font-family字样,右键点击网页源代码,搜索font-family,找到@font-face等关键字,通过分析data:application/font-ttf,可以猜测后面长串字符串应该是对某个ttf字体进行了base64编码。
上python,解码生成ttf字体文件。
from fontTools.ttLib import TTFont
import base64
import iokey='''
AAEAAAALAIAAAwAwR1NVQiCLJXoAAAE.......AAAA #key值为源代码中的长串字符串
'''
data = base64.b64decode(key) #base64解码
fonts = TTFont(io.BytesIO(data)) #生成二进制字节
fonts.save('font-face.ttf')
将生成的font-face.ttf通过百度字体编辑器打开,可以看到对所有数字进行了重新编码。
是不是有点儿疑惑?怎么对数字重新编码???其实也可以理解为是对编码对应的图形进行了改变,比如同样是编码(0x9a4b),在常规字体中是"驋"的模样可能在B字体中就是"2"的模样,在自己设计的字体里,可以任性的把(0x9a4b)编码对应的图形设计成"2"的形状,举个例子:
同样是(0x9a4b)编码,在字体A中,你认为是2,在字体B中,即便和字体A中形状不一样,你一样认为是2,但在自定义字体中,你会认为是w。同样的道理,我们可以把常规字体中的乱码,设计成数字的形状。
所以在自定义字体的基础上,我们可以变相认为对字体进行了加密,从而起到保护重要数据的作用。
3.实现font-face:
理解了font-face的原理后,我们可以将font-face策略应用到自己的web项目中。为了简便操作,我直接用了第二步中在58同城网站下载的字体hhh(自行设计字体也很cool,想怎么画怎么画)。在前端html文件中加入以下内容:
<style>
@font-face{font-family:'secret';src:url('data:application/font-ttf;
charset=utf-8;base64,AAEAAAALAIAAAwAwR1NVQiCLJXoA.......AAAAAAAAA')
format('truetype')}.strongbox{font-family:'fangchan-secret','Hiragino Sans GB',
'Microsoft yahei',Arial,sans-serif,'宋体'!important}
</style>
<style>
.font{font-family:'secret','Hiragino Sans GB','Microsoft yahei',Arial,sans-serif,'\5B8B\4F53' !important}
</style>
上面一段的作用为引入名叫"secret"的自定义字体,然后通过style设计.font,使所有class为"font"的标签应用此自定义字体。换言之,当你想用自定义字体时,在相应的标签中加入class=“font”,如下html源码和前端显示结果:
可见2020 04-27日期字样在源码中显示为乱码。
访问上图中我的web项目,点击链接即可,(暂时只对页面右侧一栏中的日期做了font-face加密。)
如有错误或建议,请在评论处指出!
反爬虫策略之font-face相关推荐
- 反击“猫眼电影”网站的反爬虫策略
0×01 前言 前两天在百家号上看到一篇名为<反击爬虫,前端工程师的脑洞可以有多大?>的文章,文章从多方面结合实际情况列举了包括猫眼电影.美团.去哪儿等大型电商网站的反爬虫机制.的确,如文 ...
- Scrapy绕过反爬虫策略汇总
文章目录 一.Scrapy无法返回爬取内容的几种可能原因 1,ip封锁爬取 2,xpath路径不对 3,xpath路径出现font,tbody标签 4,xpath路径不够明确 5,robot协议 6, ...
- 各大前端巨头反爬虫策略
各大前端巨头反爬虫策略 1. 前言 对于一张网页,我们往往希望它是结构良好,内容清晰的,这样搜索引擎才能准确地认知它. 而反过来,又有一些情景,我们不希望内容能被轻易获取,比方说电商网站的交易额,教育 ...
- python爬取网页防止重复内容_python解决网站的反爬虫策略总结
本文详细介绍了网站的反爬虫策略,在这里把我写爬虫以来遇到的各种反爬虫策略和应对的方法总结一下. 从功能上来讲,爬虫一般分为数据采集,处理,储存三个部分.这里我们只讨论数据采集部分. 一般网站从三个方面 ...
- 代理ip网站开发_网站反爬虫策略,用代理IP都能解决吗?
很多人会使用到网页采集器,其实这也是通过程序来进行采集的,如果没有使用代理IP,采集速度快了,照样是会被封住的.另外,这些网站还有其他的一些反爬策略,同样也会影响到我们采集网页的数据,这是如何限制的呢 ...
- 网站反爬虫策略VS反反爬虫策略
网站反爬虫策略 1.通过User-Agent校验反爬 2.通过访问频度反爬 3.通过验证码校验反爬 4.通过变换网页结构反爬 5.通过账号权限反爬 反反爬虫策略制定 1.发送模拟User-Agent: ...
- 常见的一些反爬虫策略(下篇)-Java网络爬虫系统性学习与实战系列(10)
常见的一些反爬虫策略(下篇)-Java网络爬虫系统性学习与实战系列(10) 文章目录 联系方式 反爬虫策略 文本混淆 SVG映射 CSS文字偏移 图片混淆伪装 字体反爬 Referer字段反爬 数据分 ...
- 使用scrapy做爬虫遇到的一些坑:网站常用的反爬虫策略,如何机智的躲过反爬虫Crawled (403)
在这幅图中我们可以很清晰地看到爬虫与反爬虫是如何进行斗智斗勇的. 在学习使用爬虫时,我们制作出来的爬虫往往是在"裸奔",非常的简单. 简单低级的爬虫有一个很大的优点:速度快,伪装度 ...
- scrapy框架开发爬虫实战——反爬虫策略与反反爬虫策略
反爬虫.反反爬虫 简单低级的爬虫有一个很大的优点:速度快,伪装度低.如果你爬取的网站没有反爬机制,爬虫们可以非常简单粗暴地快速抓取大量数据,但是这样往往就导致一个问题,因为请求过多,很容易造成服务器过 ...
- Scrapy应对反爬虫策略
一.设置用户代理 设置User Agent模拟浏览器,在Scrapy框架中,有四种方法设置User Agent. 1.在settings.py中·直接设置User Agent. 2.在settings ...
最新文章
- Linux下安装Python-3.3.2【转】
- 计算机软件技术 上海电力学院,上海电力学院 计算机软件技术 实验三 用头插法和尾插法创建线性表...
- 牛客题霸 二分查找 C++题解/答案
- 机智云代码移植_IoT开发者 | 基于STM32F103的机智云宠物屋外加4路继电器开源教程...
- timerfd与epoll
- 第一百一十二期:96秒100亿!如何抗住双11高并发流量?
- 定期定量采购_?采购计划员必备:各种物料采购计划与订单制定的技巧与方法...
- java通过url获取网页内容_Java语言通过URL读取网页数据并保存到本地文件(代码实例)...
- MySQL为啥不用平衡二叉树_MySQL的索引,为什么是B+而不是平衡二叉树
- Python读CookBook之数据结构和算法
- dedecms设置端口号_织梦程序使用宝塔面板端口修改方法
- 《Java从入门到精通》(第六版)配套资源分享
- 计算机联锁人工进路的办理,计算机联锁与6502
- java实现选择排序(思路与实现)
- 逃离塔科夫机器码解除,实战解决【100%成功方法】
- [论文写作-词汇] 这么多特别,该用哪个?special especial specific particular peculiar exceptional extraordinary
- docker opengrok
- mtk 耳机accdet检测驱动分析
- 【2019年04月30日】股息率分红最高排名
- 网点分布图如何制作,如何制作网点地图