文章目录

  • 前景摘要
  • 字体反爬虫
  • 突破字体反爬虫思路的探索
  • 最终突破快手反爬虫代码

前景摘要

最近一个朋友问我,字体反爬虫的事,他发给我一个快手网站,我由于比较忙没回他,于是后来他说解决不了就要上scrapy框架,我是正义的程序员,这么小的事情就上框架,这也太残忍了,无故增加人家服务器压力多不好,人家网站维护者也是为了讨生活的程序员,咱们也是,因该相互体贴。于是我挺身而出,对他说,请给我10分钟让我破了他。

字体反爬虫

字体反爬虫给的来源呢
:我们了解到html是单个网站的骨架,而css是用来修饰html的,虽然页面渲染加载css样式的时候是不会改变html的内容,但是字体的加载与映射工作是由css来完成的,所以我们可能使用Splash,selenium和puppereer,都无法解决,字体反爬虫就是利用这个特点
比如下图,红色框框的地方,我们发现数字都被加密了。有点像韩文。

突破字体反爬虫思路的探索

1.探索字体被改变的原因
如下图,我们之前说过了,字体的加载与映射关系是通过css样式设置的,于是我们在css样式中看到了设置字体代码如下:

总结:在代码中我们可以看到eto,woff等格式的字体文件,于是我们可以判断,网页中的数字就是被这些文件所改变的,并且这么多文件,只有一套字体,可能是为了兼容各种系统把。
2.探索字体文件的映射规律
于是我们下载后,使用百度编辑器FontEditor来进行字体实时预览的功能,请点击我,界面如下图所示

先将这个https://static.yximgs.com/udata/pkg/kuaishou-front-end-live/fontscn_h57yip2q.eot文件下载下来,并使用百度编辑器FontEditor进行打开,打开后字体如下:

我们可以发现,这里有14个字体块,并且包含所有的数字并且每个数字下面都包括了一个美刀符号跟四个字母,于是我在快手页面随便找了三个特殊字符。进行使用unicode编码。
代码示例

special_character = '뷍껝뾭'
new_special_character = (list(map(lambda x: x.encode('unicode_escape'), special_character)))
print(new_special_character)'''
运行结果:[b'\\ubdcd', b'\\uaedd', b'\\ubfad']
'''

我们将结果与上图的数字图片下的一个美刀符号跟四个字母组成的字符串进行对比
经过对比我们发现

b'\\ubdcd'   $BDCD    1
b'\\uaedd'   $AEDD    8
b'\\ubfad'   $BFAD    9

根据与原来的网页数据进行对比我们发现189就是正确的,那么说明这个映射关系显而易见了。
总结:于是我们判定这个编码映射关系需要我们事先根据文件样式规则来制定,就是图片上面的字符串去掉$再在前面加上\u,然后全变小写就行。有五个文件,于是我们需要弄5次来应对突发情况。

最终突破快手反爬虫代码

代码示例

import requestsdef deal_with_character(special_character):#     #将映射关系写入字典fontscn_h57yip2q = {r'\\uabcf': '4',r'\\uaced': '3',r'\\uaedd': '8',r'\\uaede': '0',r'\\uafcd': '6',r'\\ubdaa': '5',r'\\ubdcd': '1',r'\\ubfad': '9',r'\\uccda': '2',r'\\ucfbe': '7',}#进行unicode编码new_special_character = (list(map(lambda x: x.encode('unicode_escape'), special_character)))#定义处理过后的字符列表character=[]#进行匹配for i in new_special_character:try:character.append(fontscn_h57yip2q[str(i)[2:-1:]])except:character.append(str(i)[2:-1:])continuereturn "".join(character)def main():header={"Cookie": "clientid=3; did=web_4ebab7dfa63d79cba7ebe0fdf6330b28; client_key=65890b29; kuaishou.live.bfb1s=9b8f70844293bed778aade6e0a8f9942; userId=1218439726; userId=1218439726; kuaishou.live.web_st=ChRrdWFpc2hvdS5saXZlLndlYi5zdBKgAQxtC5tRiuxaK7exGY2Es00UuzlMfobuAuxGfkK6x-tk7pWojDEw5aQtUDZPvv4hYhCGE1orwpglwzxRhPRuYMwdN-RVzF9hvPItDsc0oGl9IhKnm6Q6XXf9BAWyskjSdlDgr1uW0NSTPaMcyvEQJTWIPluziQ5AX7q4oJEzkn2rVts8QOORyllrNbydXRyLiQu-H6iQ2uji-R4-NmAmJA8aEoJNhwQ4OUDtgURWN6k9Xgm8PSIgD-8O23y2QtSaLlc_WCgf4Ev2ugqnxbObwRXH46NWAWsoBTAB; kuaishou.live.web_ph=5c4e3fa8b45ada2084298dec8946ba78971e","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36",}data={"operationName":"sensitiveUserInfoQuery","variables":{"principalId":"wudadala"},"query":"query sensitiveUserInfoQuery($principalId: String) {\n  sensitiveUserInfo(principalId: $principalId) {\n    kwaiId\n    userId\n    constellation\n    cityName\n    countsInfo {\n      fan\n      follow\n      photo\n      liked\n      open\n      playback\n      private\n      __typename\n    }\n    __typename\n  }\n}\n"}#进行post请求response_json=requests.post('https://live.kuaishou.com/graphql',headers=header,json=data).json()response_json1=response_json["data"]["sensitiveUserInfo"]["countsInfo"]#进行取出数据,并进行匹配for i,j in response_json1.items():print("{}:{}".format(i,deal_with_character(j)))if __name__ == '__main__':main()'''
运行结果:fan:31.6w
follow:189
photo:538
liked:0
open:0
playback:0
private:0
__typename:CountsInfo
'''

总结:经过代码的匹配我们就完成任务了

快手字体反爬虫?请给我10分钟,让我破了他相关推荐

  1. Python 爬虫工程师必看,深入解读字体反爬虫

    字体反爬虫开篇概述 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识. 那么针对这 ...

  2. 用前考虑清楚,伤敌一千自损八百的字体反爬虫

    内容选自即将出版的<Python3 反爬虫原理与绕过实战>,本次公开书稿范围为第 6 章--文本混淆反爬虫.本篇为第 6 章中的第 4 小节,其余小节将逐步放送. 字体反爬虫开篇概述 在 ...

  3. 【python实现网络爬虫(4)】实习僧网站信息爬取(字体反爬虫破解)

    实习僧网站 实习僧网址,地址为北京,在搜索框输入"python",如下 实战解析 步骤一.建立for循环爬取前20页的内容 首先.查看翻页URL的信息,找规律 第一页:https: ...

  4. 深入细枝末节,Python的字体反爬虫到底怎么一回事

    内容选自 即将出版 的<Python3 反爬虫原理与绕过实战>,本次公开书稿范围为第 6 章--文本混淆反爬虫.本篇为第 6 章中的第 4 小节,其余小节将 逐步放送 . 字体反爬虫开篇概 ...

  5. pythonttf字体反爬虫_Python爬虫---汽车之家字体反爬

    本篇文章给大家带来的内容是关于Python爬虫---汽车之家字体反爬,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 目标网站:汽车之家 目标网址:https://club.autoh ...

  6. python爬虫之字体反爬虫

    原因 今天下午在抓取一个网页时,发现的网页字体反爬,这种情况一句话总结:即网页文本里的数字与网页上显示的字体不一致.为什么会出现这样的情况呢?原因是开发者在网页文本里引入了改变字体的文件. 然后可以看 ...

  7. 字体反爬虫处理猫眼(数字)

    环境:Windows7 +Python3.6+Pycharm2017 目标:猫眼电影票房 前言:字体反爬,也是一种常见的反爬技术,例如猫眼电影票房,汽车之家,天眼查等网站.这些网站采用了自定义的字体文 ...

  8. pythonttf字体反爬虫_利用Python采集起点中文网小说,并解决字体反爬的问题

    个人比较喜欢看小说,于是乎想利用Python爬取小说网站--起点中文网,在Python编程爬取定位过程中遇到了Python反爬虫,咨询了我旁边的前端大神,说下方法 当前页面接口返回的html源码 当前 ...

  9. 《封号码罗》python爬虫之抖音分享页破解字体反爬虫进阶实战(六)

    无敌免责声明:本文主要用于学习技术,切不可用于非法盈利目的,不可用于商业,不可攻击该服务器 先放出结果镇楼: {'nickname': 'Dear-迪丽热巴', '抖音ID': '274110380' ...

最新文章

  1. 拷贝构造函数的参数类型必须是引用
  2. poj 1699 Best Sequence (搜索技巧 剪枝 dfs)
  3. 【控制】《多智能体系统一致性与复杂网络同步控制》郭凌老师-第7章-Lurie 型动态网络的鲁棒 H 无穷簇同步
  4. 分布式系统概念:一致性协议、一致性模型、拜占庭问题、租约、副本协议
  5. WebSocket服务器和客户端的一对多通知实现
  6. calling '**' with incomplete return type
  7. 【码云】git简单使用总结
  8. 在线教育开源 java_新款SpringBoot在线教育平台开源了
  9. 数学建模-BP神经网络简介
  10. 逻辑回归(神经网络Sigmod激活函数,计量logit模型)
  11. echarts图表主题--马卡龙macarons--自己配置主题颜色
  12. Android—调用高德地图显示定位蓝点
  13. python 通过上传excel对数据分割分组导出
  14. 自律自学,越努力越幸运
  15. moment常用用法详解
  16. 红米6耳机听歌时音量过大的解决办法
  17. 认识无线网络之Wi-Fi
  18. 智能边缘计算设备介绍
  19. 裸奔系列之博科SAN交换机(5)---ZONE配置(核心功能)
  20. android版本怎么升级6,android系统怎样从4.2升级到6.0

热门文章

  1. Debian Xfce4键盘快捷键设置与修改
  2. C语言程序设计——从键盘任意输入一个字符串(可以包含:字母、数字、标点符号,以及空格字符),计算其实际字符个数并打印输出,即不使用字符串处理函数strlen()编程,但能实现strlen()的功能。
  3. windows下 QT 的 Android 环境搭建(附软件测试)
  4. 设有A,B,C,D,E五人从事J1,J2,J3,J4,J5五项工作,每人只能从事一项,找到效益最高的的一种组合输出
  5. html tabl自动生成序列号,jQuery实现table中的tr上下移动并保持序号不变的实例代码...
  6. 微信公众号开发---基本原理及注册
  7. 这位在做游戏的前电影导演,希望能变着法子讲故事,并给予玩家会心一击
  8. php判断网站是否可以访问,PHP简单检测网址是否能够正常打开的方法
  9. 奔三的年纪,需要知道的44件事
  10. 联想小新air15 2022款 评测