趁热打铁来写字体反爬的第二篇,首先是题目

网页上显示的不是常规的数字,源码里面也是一些汉字

虽然看上去很乱,但是仔细观察还是能发现一些规律,比如:长 对应 2,思对应 1

所以这里的解题思路,也是先找到这些汉字的映射表

还是像第一题那样,把网页里面的base64保存成本地的ttf文件,然后打开查看:

这里不再是像第一题的英文单词,而是 uni601D 这样形似 unicode 编码的,解码一下试试

In [10]: a
Out[10]: '\\u601D'In [11]: a.encode("latin-1").decode("unicode_escape")
Out[11]: '思'

unicode_escape 是一种编码集,类似 utf-8,这种编码集直接将unicode内存编码存储进文件

参考:https://blog.csdn.net/qq_40728667/article/details/122282693

各个编码单字节的外围:ASCII(0-127), LATIN1(0-255), UTF8(0-253)

参考:https://blog.csdn.net/liuhhaiffeng/article/details/80162033

和源码中的汉字是一致的,那么我们只要拿到前面十个unicode编码,解码出它们对应的汉字,然后就能根据顺序得出每个汉字对应的数字

def parse_ttf():"""构造汉字到数字的映射"""font = TTFont("page-1.ttf")name_list = font["cmap"].tables[0].ttFont.getGlyphOrder()unicode_list = ["\\u" + c[-4:] for c in name_list[1:11]]cha2num = {}for index, u in enumerate(unicode_list):c = u.encode("latin-1").decode("unicode_escape")cha2num[c] = str(index)return cha2num

同一个汉字不同unicode?

从ttf提取的汉字,可能会出现和网页的汉字对不上的情况

比如网页的是 ,ttf的是 ,两者看起来相似,但是unicode码是不同的

In [1]: '鼻'.encode('unicode_escape')
Out[1]: b'\\u9f3b'In [2]: '⿐'.encode('unicode_escape')
Out[2]: b'\\u2fd0'

这里有解释这种现象

产生的具体原因我找了很久也没找到,猜测是网页在自动utf8解码的时候,把汉字转换错了

为了应对这种情况,我之前有专门整理大部分这些生僻字的映射,基本可以解决这道题出现的所有情况

Unicode基本汉字、部首扩展、康熙部首对照字典_银古 | cxs的博客-CSDN博客_unicode 常用汉字

{"⼀": "一","⼄": "乙","⼆": "二","⼈": "人","⼉": "儿","⼊": "入","⼋": "八","⼏": "几","⼑": "刀","⼒": "力","⼔": "匕","⼗": "十","⼘": "卜","⼚": "厂","⼜": "又","⼝": "口","⼞": "口","⼟": "土","⼠": "士","⼤": "大","⼥": "女","⼦": "子","⼨": "寸","⼩": "小","⼫": "尸","⼭": "山","⼯": "工","⼰": "己","⼲": "干","⼴": "广","⼸": "弓","⼼": "心","⼽": "戈","⼿": "手","⽀": "支","⽂": "文","⽃": "斗","⽄": "斤","⽅": "方","⽆": "无","⽇": "日","⽈": "曰","⽉": "月","⽊": "木","⽋": "欠","⽌": "止","⽍": "歹","⽏": "毋","⽐": "比","⽑": "毛","⽒": "氏","⽓": "气","⽔": "水","⽕": "火","⽖": "爪","⽗": "父","⽚": "片","⽛": "牙","⽜": "牛","⽝": "犬","⽞": "玄","⽟": "玉","⽠": "瓜","⽡": "瓦","⽢": "甘","⽣": "生","⽤": "用","⽥": "田","⽩": "白","⽪": "皮","⽫": "皿","⽬": "目","⽭": "矛","⽮": "矢","⽯": "石","⽰": "示","⽲": "禾","⽳": "穴","⽴": "立","⽵": "竹","⽶": "米","⽸": "缶","⽹": "网","⽺": "羊","⽻": "羽","⽼": "老","⽽": "而","⽿": "耳","⾁": "肉","⾂": "臣","⾃": "自","⾄": "至","⾆": "舌","⾈": "舟","⾉": "艮","⾊": "色","⾍": "虫","⾎": "血","⾏": "行","⾐": "衣","⾒": "儿","⾓": "角","⾔": "言","⾕": "谷","⾖": "豆","⾚": "赤","⾛": "走","⾜": "足","⾝": "身","⾞": "车","⾟": "辛","⾠": "辰","⾢": "邑","⾣": "酉","⾤": "采","⾥": "里","⾦": "金","⾧": "长","⾨": "门","⾩": "阜","⾪": "隶","⾬": "雨","⾭": "青","⾮": "非","⾯": "面","⾰": "革","⾲": "韭","⾳": "音","⾴": "页","⾵": "风","⾶": "飞","⾷": "食","⾸": "首","⾹": "香","⾺": "马","⾻": "骨","⾼": "高","⿁": "鬼","⿂": "鱼","⿃": "鸟","⿄": "卤","⿅": "鹿","⿇": "麻","⿉": "黍","⿊": "黑","⿍": "鼎","⿎": "鼓","⿏": "鼠","⿐": "鼻","⿒": "齿","⿓": "龙","⼣": "夕","⺁":"厂","⺇":"几","⺌":"小","⺎":"兀","⺏":"尣","⺐":"尢","⺑":"												

爬虫逆向之字体反爬(二)、镀金的天空-字体反爬-2相关推荐

  1. 爬虫逆向之字体反爬(一)、镀金的天空-字体反爬-1

    题目地址:http://www.glidedsky.com/level/crawler-font-puzzle-1 写一下之前处理过的几个字体反爬实战,也是很常见的一种反爬类型,这是第一篇 先来看一下 ...

  2. 【Python3.6爬虫学习记录】(十二)PhantomJS模拟登陆并爬取教务处学生照片(哈工大)

    前言:这也不算心血来潮的事情,前面几天文章都涉及过,之前一直觉得很麻烦.必须SSLVPN登陆,到教务处页面,然后进行页面跳转到照片页面.所以每次打开图片页面都要保证登陆教务处,当然可以使用cookie ...

  3. python爬虫爬取58网站数据_Python爬虫,爬取58租房数据 字体反爬

    Python爬虫,爬取58租房数据 这俩天项目主管给了个爬虫任务,要爬取58同城上福州区域的租房房源信息.因为58的前端页面做了base64字体加密所以爬取比较费力,前前后后花了俩天才搞完. 项目演示 ...

  4. python爬虫反爬策略_抖音字体反爬,爬虫字体反爬策略——每周一个爬虫小教程系列...

    在B站上看到一个关于抖音字体反爬的视频,看完之后,精神抖擞,不禁感觉,我又行了,于是在模拟器上下载了一个抖音,打开了我尘封已久的抖音号. 可以看见显示的数字是正常的,但是查看源码就是错误的. 既然是字 ...

  5. MOOC网课爬虫逆向(二)

    MOOC网课爬虫逆向(二) 补充一下关于开小号的问题,事实上对于我的mooc线代课,你开小号只能通过分数知道错了几个,但是不能知道哪个错了以及正确答案是多少--我将它理解为防止别人开小号 那你暴力开小 ...

  6. 【Python3爬虫】常见反爬虫措施及解决办法(二)...

    [Python3爬虫]常见反爬虫措施及解决办法(二) 这一篇博客,还是接着说那些常见的反爬虫措施以及我们的解决办法.同样的,如果对你有帮助的话,麻烦点一下推荐啦. 一.防盗链 这次我遇到的防盗链,除了 ...

  7. pyquery获取不到网页完整源代码_爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网...

    爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网 前言 上篇文章 PyQuery (一) 回顾.今天来介绍具体 PyQuery 的使用方法. 穷游网目标与分析 开始之前,按照之前的套路一步 ...

  8. 【实用工具系列之爬虫】python实现爬取代理IP(防 ‘反爬虫’)

    系列 [实用工具系列之爬虫]python实现爬取代理IP(防 '反爬虫') [实用工具系列之爬虫]python实现快速爬取财经资讯(防 '反爬虫') 本文使用python实现代理IP的爬取,并可以防' ...

  9. 爬虫实战(二)—利用requests、selenium爬取王者官网、王者营地APP数据及pymongo详解

    概述 可关注微信订阅号 loak 查看实际效果. 代码已托管github,地址为:https://github.com/luozhengszj/LOLGokSpider ,包括了项目的所有代码. 本文 ...

最新文章

  1. 年度书单盘点 | “裁员潮”持续蔓延?职场没有铁饭碗,只有硬技能
  2. pyplot绘图标题错误处理
  3. kotlin学习之嵌套类和内部类(六)
  4. 虚拟机测试必备虚拟机之VirtualBox 使用
  5. 牛客网 【每日一题】[SCOI2009]粉刷匠
  6. get set方法简化_简化开放科学的4种方法
  7. [No0000B5]C# 类型基础 值类型和引用类型 及其 对象判等 深入研究1
  8. C/C++三个标准设备文件句柄
  9. python模块--subprocess
  10. 42. netcat
  11. mysql实验思维导图高清_MySQL思维导图
  12. pandas 聚合 df.groupby.agg
  13. 15.4.1 使用CREATE OR REPLACE VIEW语句修改视图结构
  14. Day715. 适配不同的类型的switch匹配 -Java8后最重要新特性
  15. thuwc2019滚粗记
  16. python正则抓取身份证号码,验证18位身份证号码是否正确
  17. sof_pof_jic_elf程序下载方法
  18. 百果园app系统开发b2c模式详解
  19. JAVA NIO:NIO与OIO的对比以及Channel通道、Selector选择器、Buffer缓冲区的介绍 高并发
  20. HDU 2081:手机短号 (C语言)

热门文章

  1. 深度学习论文: TPH-YOLOv5: Improved YOLOv5 Based on Transformer Prediction Head 及其PyTorch实现
  2. 电脑d盘打不开怎么回事?如何解决及恢复里面的文件
  3. sortable.js yyds
  4. 使用java构建一个挡板程序-5-使用webFilter实现挡板服务URL配置化
  5. java实现选址问题_选址问题、模型与算法
  6. PWA系列 - Cache API 的设计与实现
  7. 虚拟服务器怎么建商城,如何建立一个独立商城网店初学分享ShopEx网店系统建站心得...
  8. kotlin delegated class and property
  9. 语音调节 变调不变速
  10. 1118. 分成互质组