200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Python起点字体加密破解

Python起点字体加密破解

时间:2022-09-01 11:47:05

相关推荐

Python起点字体加密破解

import requests

import re

from lxml import etree

from fontTools.ttLib import TTFont

from io import BytesIO

url = ‘/info/1012932890’

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)

#先拿到span的class名字,它和字体的URL路径中的字体文件名字是对应的,每次刷新两个都会一起改变,所以每次请求都先把classname取出来在下边拼接字体URL使用

classname = tree.xpath(’//div[contains(@class,“book-info”)]/p/em/span/@class’)[0]

#拼接得到字体的url,因为起点网页中的加密字体的几个URL中只有最后 {名字}.ttf 在变化,所以每次请求时把classname抓出来进行拼接使用

font_url = ‘/qd_anti_spider/{}.ttf’.format(classname)

#得到span中你要爬取的内容

pattern = pile(r’(.*?)’)

ret = pattern.search(r.text)

string = ret.group(1)

print(string)

#得到如下字符串

𘟍𘟎𘟉𘟇𘟐

#将字体文件下载下来

r_font = requests.get(url=font_url, headers=headers)

filename = font_url.split(’/’)[-1]

with open(filename, ‘wb’) as fp:

fp.write(r_font.content)

#打开这个字体,想要不下载到本地直接在内存中读取字体的话必须得用BytesIO打开字体内容

font = TTFont(BytesIO(r_font.content))

#找到字体文件内的映射关系(字典)

dic = font.getBestCmap()

#关闭这个字体

font.close()

print(dic)

#{100317: ‘three’, 100319: ‘seven’, 100320: ‘four’, 100321: ‘five’, 100322: ‘zero’, 100323: ‘nine’, 100324: ‘eight’,100325: ‘two’, 100326: ‘six’, 100327: ‘period’, 100328: ‘one’}

#因为字体文件中的映射关系对应的是英文,如上;所以自己再设计一个字典,找出html中对应的数字

font_dic = {‘one’: ‘1’, ‘two’: ‘2’, ‘three’: ‘3’, ‘four’: ‘4’, ‘five’: ‘5’, ‘six’: ‘6’, ‘seven’: ‘7’, ‘eight’: ‘8’,‘nine’: ‘9’, ‘zero’: ‘0’, ‘period’: ‘.’}

#将string按照分号进行切割

𘟍𘟎𘟉𘟇𘟐

#因为最后有一个封号所以最后会有一个空的元素,所以切一下片

lt = string.split(’;’)[:-1]

#取出对应数字进行拼接

number = ‘’

for code in lt:

code = code.lstrip(’&#’)

char_code = dic[int(code)]

number_code = font_dic[char_code]

number += number_code

print(number)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。