反击“猫眼电影”网站的反爬虫策略

news/2024/5/14 1:15:14/文章来源:https://blog.csdn.net/weixin_30580943/article/details/94955493

0×01 前言

前两天在百家号上看到一篇名为《反击爬虫,前端工程师的脑洞可以有多大?》的文章,文章从多方面结合实际情况列举了包括猫眼电影、美团、去哪儿等大型电商网站的反爬虫机制。的确,如文章所说,对于一张网页,我们往往希望它是结构良好,内容清晰的,这样搜索引擎才能准确地认知它;而反过来,又有一些情景,我们不希望内容能被轻易获取,比方说电商网站的交易额,高等学校网站的题目等。因为这些内容,往往是一个产品的生命线,必须做到有效地保护。这就是爬虫与反爬虫这一话题的由来。本文就以做的较好的“猫眼电影”网站为例,搞定他的反爬虫机制,轻松爬去我们想要的数据!

0×02 常见反爬虫

从功能上来讲,爬虫一般分为数据采集,处理,储存三个部分。而作为程序员的我们只关心数据采集部分,处理什么的还是交给那些数据分析师去搞吧。

一般来说,大多数网站会从三个方面反爬虫:用户请求的Headers,用户行为,网站目录和数据加载方式。前两种比较容易遇到,大多数网站都从这些角度来反爬虫,而第三种则相对比较特殊,一些应用ajax的网站会采用,这样无疑会增大了爬虫爬取的难度。

然而,这三种反爬虫策略则早已有应对的方法和策略。如果遇到了从用户请求的Headers反爬虫机制,可以直接在爬虫中添加Headers,将浏览器的User-Agent复制到爬虫的Headers中;或者将Referer值修改为目标网站域名。对于检测Headers的反爬虫,在爬虫中修改或者添加Headers就能很好的绕过。对于基于用户行为的反爬虫其实就是通过限制同一IP短时间内多次访问同一页面,应对策略也是很粗暴——使用IP代理,可以专门写一个爬虫,爬取网上公开的代理ip,检测后全部保存起来。有了大量代理ip后可以每请求几次更换一个ip,即可绕过这种反爬虫机制。对于最后一种动态页面反爬虫机制来讲,selenium+phantomJS框架能够让你在无界面的浏览器中模拟加载网页的动态请求,毕竟selenium可是自动化渗透的神器。

0×03 猫眼反爬虫介绍

介绍完常见的反爬虫机制,我们回过头看看我们今天的主角:猫眼电影的反爬虫是什么样的。

猫眼反爬虫

对于每日的电影院票价这一重要数据,源代码中展示的并不是纯粹的数字。而是在页面使用了font-face定义了字符集,并通过unicode去映射展示。简单介绍下这种新型的web-fongt反爬虫机制:使用web-font可以从网络加载字体,因此我们可以自己创建一套字体,设置自定义的字符映射关系表。例如设置0xefab是映射字符1,0xeba2是映射字符2,以此类推。当需要显示字符1时,网页的源码只会是0xefab,被采集的也只会是 0xefab,并不是1:

网页源码

因此采集者采集不到正确的票价数据:

票价数据不显示

采集者只能获取到类似的数据,并不能知道””映射的字符是什么,实现了数据防采集。而对于正常访问的用户则没有影响,因为浏览器会加载css中的font字体为我们渲染好,实时显示在网页中。也就是说,除去图像识别,必须同时爬取字符集,才能识别出数字。 

查看猫眼的网站源文件正是如此:

网站源文件

所有的票价信息都是由动态font字体“加密”后得到的。既然知道了原理,我们就继续发掘,通过分析网站HTML结构,我们发现网站每次渲染票价的font字体都可以在网页的script标签中被找到:

网站 HTML 结构

字体是由base64加密后存储在网页中的,于是乎,上python:

#将base64加密的font文件解密转存本地
font = re.findall(r"src: url\(data:application/font-woff;charset=utf-8;base64,(.*?)\) format",response_all)[0]
fontdata=base64.b64decode(font)  
file=open('/home/jason/workspace/1.ttf','wb')   file.write(fontdata)   file.close()  

我们在爬取时将font文件解密后存储在本地存储为ttf文件,留做备用。

前文提到过这种web-font定义了字符集,要通过unicode去映射展示,所以,我们要构建ttf字体文件中unicode映射出来的字符字典:

构建字符字典

python代码:

import fontforge
def tff2Unicode():#将字体映射为unicode列表     filename = '/home/jason/workspace/1.ttf'     fnt = fontforge.open(filename)     for i in fnt.glyphs():         print i.unicode

我们猜测映射关系如下:

映射关系

还记得嘛,第三张图我们爬取到的数据是“绣春刀·修罗战场 341189 2017-07-20 6号厅 2D 国语 11:10 ”,我们将“&#”替换成“0”后对应上表得出的票价不是刚好是“29”嘛!

python代码:

tmp_dic={}
ttf_list = []
def creatTmpDic():#创建映射字典     tmp_dic={}     ttf_list = []     num_list = [-1,-1,0,1,2,3,4,5,6,7,8,9]     filename = '/home/jason/workspace/1.ttf'     fnt = fontforge.open(filename)     ttf_list = []     for i in fnt.glyphs():         ttf_list.append(i.unicode)     tmp_dic = dict(zip(ttf_list,num_list))#构建字典     return tmp_dic,ttf_list def tff2price(para = ";",tmp_dic={},ttf_list = []):#将爬取的字符映射为字典中的数字     tmp_return = ""     for j in para.split(";"):         if j != "":             ss = j.replace("&#","0")             for g in ttf_list:                 if (hex(g) == ss):                     tmp_return+=str(tmp_dic[g])     return tmp_return

好的,到此,我们已经可以说已经完成了对票价“加密”数据的破解啦~还是有点小小的成就感呢!但是,这里面还是有个很坑的地方:开发者已经想到采集者可以通过分析,知道每一个映射代表的意思,从而进行采集后转换处理,所以我们每次访问都是随机得到一种字体,而且开发者还定期更新一批字体文件和映射表用来加大采集的难度,所以我们在采集的过程中不得不每采集一个页面就更新一次本地的该网页的web-font字体,无疑会大大增加爬虫的爬取成本和爬取效率,所以从一定意义上确实实现了反爬虫。

实现爬取

参考文献:

http://blog.csdn.net/fdipzone/article/details/68166388

https://baijiahao.baidu.com/s?id=1572788572555517&wfr=spider&for=pc

https://zhuanlan.zhihu.com/p/20520370?columnSlug=python-hacker

转载于:https://www.cnblogs.com/h2zZhou/p/7248261.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_817263.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

域名购买和网站备案心得

在上一篇部署云服务器的文章中,已经租用和部署好了服务器,那么就讲一下最麻烦的域名购买和备案。 1.域名购买 首先说一下域名购买,我是在腾讯云购买的,价格很便宜一年也就30左右,对比服务器价格便宜的多,…

开源项目大家谈-网站性能调校-Cache的使用

之所以用这个题目是因为很多人常常问我研究开源项目的意义,有一些开源项目在别人眼里看起来完全没有搞头,是一些没有实用价值的项目。其实开源项目往往是新技术的试验田,是全世界优秀程序开发者智慧的汇集,如果你仔细研读这些开源…

揭秘博友卡通身份 学做SEO链接诱饵

首先我们来揭秘一下各位博主的卡通身份,纯野随机选了几个博主,哈哈,真的是好逗啊。注:(若下面的卡通中没有你,可以留言,纯野下期可以把你给放上来亮相! 若是你不喜欢请通知纯野进行…

精选国外知名网站手机版网页设计欣赏

互联网发展如此的迅速,手机互联网用户逐渐成了一个相当庞大的群体。所以我们的网站必须去考虑适应手机互联网用户的需求,从传统的电脑互联网到手机互联网(更准确的说是移动互联网)需要有至少两个方面的考虑,一是移动互联网用户的带宽是有限制…

【私活案例3】 获取某市网站普通高中录取分数小工具

私活案例3:获取某市网站普通高中录取分数小工具0 前言年龄越来越大,记性越来越差,只想把自己一些零零散散的私活经历记录下来,日后回头看,还能想起这些小项目、小技术点,还能想起那些和客户、朋友打交道的各…

使用whos.amung.us实时统计网站在线人数

如果需要在前台显示网站实时在线人数,可以使用whos.amung.us提供的一款在线人数实时统计工具,它可以统计你的网站或者博客当前在线人数,支持自定义颜色。 打开:https://whos.amung.us/ 滑动到下面: 直接复制代码&am…

转:利用ArcGIS Server REST API实现对Feature的编辑操作 - 开源IT技术网站

ArcGIS API for Flex中提供了一些工具实现对Feature的编辑操作,不过其实质是对ArcGIS Server REST API的再包装。为了更大的灵活性,在这里我们谈一下如何直接调用ArcGIS Server REST API来实现对Feature的新增、更新、删除操作。 FeatureServer 对Featur…

《大型网站系统与Java中间件》读书笔记 (中)

前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 回顾上一篇: 《大型网站系统与Java中间件》读书笔记(一)这周周末读了第四章,现在过来做做笔记&#…

.NET技术+25台服务器怎样支撑世界第54大网站

摘要:同时使用Linux和Windows平台产品,大量使用静态的方法和类,Stack Overflow是个重度性能控。同时,取代横向扩展,他们坚持着纵向扩展思路,因为“硬件永远比程序员便宜”。 StackOverflow是一个IT技术问答…

钓鱼网站盯梢微博 360“围剿中奖骗子”

一段时间以来,随着“织围脖”的兴起,微博晋升为全民级互联网应用,而一些曾以短信、聊天工具为主要传播载体的钓 鱼网站也开始悄悄出现在微博上,其伪装方法仍然是老套的——“您中奖了”。对此,360安全卫士官方微博发起…

网站域名续费 服务器续费,域名续费与服务器续费

域名续费与服务器续费 内容精选换一换华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。帮助用户完成云服务器备份存储库的创建,快速购买…

hexo博客pc端不能访问手机移动端可以访问_Hexo+Kaze+Gitee Pages 搭建静态博客网站...

前言建网站本身是一个很大的工程,涉及前端页面的搭建,网站数据的存储,还要购置服务器资源,甚至是后期的维护,过程相当繁琐。不过如果仅仅是想搭建个人的网站,写写博客,想要美观,又不…

创意无极限:创意产品闪购网站Fab融资1.05亿美元

据国外媒体报道,美创意产品闪购网站Fab今天宣布,公司成功获得1.05亿投资。这个消息最先是由《华尔街日报》爆出的,之后Fab CEO Jason Goldberg在一篇博文中证实了这一消息。 此轮融资之前就有风声传出,而此次融资成功也确实让Fab如…

网易云音乐刷听歌量网站_【java+selenium】网易云音乐刷累计听歌数

背景应该是在去年的时候,刷知乎看到一个问题,大概是说怎么刷网易云音乐个人累计听歌数,然后有一个高赞回答,贴了一段js代码,直接在浏览器console执行就可以了。当时试了下,直接一下子刷了有好几万。悲剧的是…

釜底抽薪闭数千非法网站 新网用行动担起社会责任

非法网站危害社会,必须严惩不贷。近日,作为域名注册领域的领先企业,新网表率同行,近段时间内关闭了数千家非法网站,对网络违法行为打出了一记重拳。 新网重拳出击 数千非法网站无处遁形(图片来源于网络) 众所周知&…

apache shiro 怎么升级_http协议的网站装ssl升级成https

怀着无比激动的心情写此文,因为作为一个前端刚刚踩完此坑成功跨过81难重生!对就是它:https://minihome.top 大家试一下吧。A.我有什么?我要做什么?有:一个域名minihome.top一个云服务器 ECS(且能访问miniho…

qq空间网页版电脑_(带手机版数据同步)QQ空间日志说说类网站织梦模板 QQ心情日志网站源码下载...

模板名称:(带手机版数据同步)QQ空间日志说说类网站织梦模板 QQ心情日志网站源码下载本套织梦模板采用织梦最新内核开发的模板,这款模板使用范围极广,不仅仅局限于一类型的企业,资讯类的,QQ空间 日志心情类的的网站都可…

今日头条关键词排名怎么搜索_广州今日头条seo优化排名软件

广州今日头条seo优化排名软件 S1h0l1cjk广州今日头条seo优化排名软件 搜索引擎不关心链接的数量,他们只质量。礼品包装很重要,但对人来说也是如此吗需要介绍内容。上,许多人都害怕风险。在着陆页面有零风险和承诺。.是谈谈用户担心的一些问题…

用python爬取网站数据xlwt、bs4_python爬虫系列--批量爬取码云开源网站数据

python所需要的库 requests —这个库用于访问网站,并获取网页数据 bs4 ---- 用户html的标签解析拿出我们所需要的数据 threading — 使用多线程,可以让我们的爬虫执行效率变高 xlwt — excel表格的操作,用户保存我们所爬下的数据 time — 关于…

左边导航栏右边对应图片_谷歌seo查找图片工具—Mailomix

在之前的文章中Jack老师有提到过如何优化文章内容,其中有提到图文并茂的写作方式对于提高网页体验感是非常重要的.但是随之而来的又一个令人头疼的问题就是,很难找到匹配的图片.要么就是图片差强人意距离文章想表达的意思差了那么一点,要么就…