反爬虫之猫眼电影字体加密
2019-01-05 19:29
169 查看
猫眼电影里面很多数字是加密的如下图;
我们可以找到他们用的加密字体如下图;
两个黑线之间的字符串。
手工粘贴出来一份,太长中间省略了;
font_str1='d09GRgABAAAAAAggAAs.......................JnoBGUMXjA==' # 因为网页里找到的字体字符串时经过base64加密的,用下边方法解析并且保存下载字体备用 def make_font_file(base64_string:str): bin_data=base64.decodebytes(base64_string.encode()) with open('testotf2.woff','wb')as f: f.write(bin_data) return bin_data font1=TTFont(BytesIO(make_font_file(font_str1))) c=font1.getBestCmap() print('40行===',c)
将下载下来的字体用FontCreatorSetup-x64软件打开,可以看到加密字体的对应关系,如下图;
一会需要手写一份这样的对应关系作为基础字体。因为每次刷新加密字体对应关系都会被打乱,所以需要一个基础字体进行比对。
for i in range(1,12): matchGlyph=match_font['glyf'][uniList[i]] for j in range(11): baseGlyph=baseFont['glyf'][baseUniCode[j]] if matchGlyph==baseGlyph: numDic[uniList[i]]=baseNumList[j]
这里比较的时每个数字的图形画法,然后重新确定当前页面的对应关系
完整的具体代码如下;
import base64 import re from io import BytesIO from PIL import Image, ImageDraw, ImageFont import requests from fontTools.ttLib import TTFont from lxml import etree url = 'http://piaofang.maoyan.com/?ver=normal' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36', } r = requests.get(url=url, headers=headers) tree = etree.HTML(r.text) classname = tree.xpath('//*[@id="ticket_tbody"]/ul[1]/li[2]/b/i/text()')[0] font_strss=tree.xpath('//*[@id="js-nuwa"]/text()')[0] #正则出被加密过的字体字符串 reg=re.compile('base64,(.*?)\) format\(') s=reg.findall(font_strss)[0] print('21行===',s) # 因为网页每次刷新字体都会变化,所以每次都要动态获取当前的字体。 font_str2=s #手工粘贴出来一个字体,或者下载一个字体作为基础对应字体。为后边查找对应值做参照。 font_str1='d09GRgABAAAAAAggAAsAAAA.............................GUMXjA==' # 因为网页里找到的字体字符串时经过base64加密的,用下边方法解析 def make_font_file(base64_string:str): bin_data=base64.decodebytes(base64_string.encode()) # with open('testotf2.woff','wb')as f: # f.write(bin_data) return bin_data font1=TTFont(BytesIO(make_font_file(font_str1))) c=font1.getBestCmap() print('40行===',c) #对基础字体进行解析 baseFont=TTFont(BytesIO(make_font_file(font_str1))) def decode_font_advance(font_strs): match_font=TTFont(BytesIO(make_font_file(font_strs))) #定义一个空字典numDic用来放当前真实的字体对应关系 numDic={} # uniList=match_font['cmap'].tables[0].ttFont.getGlyphOrder() #手写的一个基础字体对应关系 baseNumList=['.','9','0','2','8','3','1','5','6','4','7'] baseUniCode=['x','uniE0B8','uniE141','uniF2BD','uniF620','uniF34B','uniED9A','uniED1A','uniE246','uniF52C','uniF25E'] for i in range(1,12): matchGlyph=match_font['glyf'][uniList[i]] for j in range(11): baseGlyph=baseFont['glyf'][baseUniCode[j]] if matchGlyph==baseGlyph: numDic[uniList[i]]=baseNumList[j]nums = '' for i in classname: if i=='.': num='.' else: str = i.encode("unicode-escape").decode() k = str.split('\\u')[-1] num = numDic['uni'+k.upper()] nums+=num return nums #找出当前的对应关系 nnn=decode_font_advance(font_str2) print('71行===',nnn)
相关文章推荐
- 爬虫 解析 加密字体 例子58 同城
- Python爬虫实例:爬取猫眼电影——破解字体反爬
- 爬虫遭遇状态码521陷阱 破解js加密cookie
- Python3网络爬虫教程8——有道在线翻译项目(JS加密)
- 当爬虫碰到加密请求参数
- python爬虫:爬取猫眼电影(分数的处理和多线程)
- Python爬虫—破解JS加密的Cookie
- 【python爬虫】猫眼电影TOP100电影封面下载
- Python爬虫之煎蛋网妹子图爬虫,解密图片链接加密方式
- 解决爬虫登陆电信密码加密问题
- 爬虫——爬取猫眼电影网
- python 爬虫 正则表达式爬取猫眼电影top100榜
- 模拟登录,动态token,携带cookie,密文加密,登录拉勾网,爬虫案例
- python爬虫小例子:爬取猫眼电影Top10电影相关信息(代码超详细解读)
- 手把手教你利用前端字体文件(.ttf)混淆数字来阻止爬虫爬取网站数据
- 记一个爬虫加密网站算法的解密
- 【Python爬虫】爬取猫眼电影TOP100榜
- json 加密解密爬虫
- 一起学爬虫——使用xpath库爬取猫眼电影国内票房榜
- python 爬虫抓取猫眼电影 top100 源码