2025年3月31日 星期一 乙巳(蛇)年 正月初一 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

起点字体反爬

时间:03-29来源:作者:点击数:33

先看截图,有框框:

在这里插入图片描述

我们就来破了他,上来我们先看是静态还是动态,我们重新加载下,发现是静态的,我们的我就用我们的老套路破了它

  • import requests
  • from fontTools.ttLib import TTFont
  • url = 'https://book.qidian.com/info/1021617576'
  • headers = {
  • 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36',
  • }
  • page_text = requests.get(url=url,headers=headers).text

接下里我们要字体文件

在这里插入图片描述

这个字体文件就是一个文件链接,用着这提取链接,我么直接请求他,保存下来就好了

  • font_link = re.findall(r"format\('eot'\); src: url\('(.*?)'\) format\('woff'\)",page_text)[0]
  • res = requests.get(url=font_link).content
  • with open('1.woff','wb') as f:
  • f.write(res)

我们还是用python的TTFont解析字体,解析成我们能看懂的xml格式

  • font = TTFont('1.woff')
  • font.saveXML('1.xml')
  • font_map = font['cmap'].getBestCmap()

我们看xml文件的cmap部分,构建映射关系

  • font_dict = {'eight':8, 'two':2, 'six':6, 'three':3, 'nine':9, 'zero':0, 'four':4, 'seven':7, 'five':5, 'period':".",'one':1}

我们要将映射换关系的key替换过来,替换成{100134: 0, 100136: 7, 100137: 4, 100138: 2, 100139: 1, 100140: 5, 100141: 8, 100142: 3, 100143: 6, 100144: ‘.’, 100145: 9}

  • for key in font_map:
  • font_map[key] = font_dict[font_map[key]]
  • print(font_map)

我们还是遍历映射关系,将key替换成&#+key+‘;’

在这里插入图片描述
  • for key in font_map:
  • page_text = page_text.replace('&#' + str(key) + ';', str(font_map[key]))
  • print(page_text)

循环这个字典替换成所对应的值:

整体代码:

  • # !/usr/bin python3
  • # encoding : utf-8 -*-
  • # @software : PyCharm
  • # @file : 起点中文网字体解密.py
  • # @Time : 2021/6/16 15:16
  • import re
  • import requests
  • from fontTools.ttLib import TTFont
  • url = 'https://book.qidian.com/info/1021617576'
  • headers = {
  • 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36',
  • }
  • page_text = requests.get(url=url,headers=headers).text
  • font_link = re.findall(r"format\('eot'\); src: url\('(.*?)'\) format\('woff'\)",page_text)[0]
  • res = requests.get(url=font_link).content
  • with open('1.woff','wb') as f:
  • f.write(res)
  • font = TTFont('1.woff')
  • font.saveXML('1.xml')
  • font_map = font['cmap'].getBestCmap()
  • print(font_map)
  • font_dict = {'eight':8, 'two':2, 'six':6, 'three':3, 'nine':9, 'zero':0, 'four':4, 'seven':7, 'five':5, 'period':".",'one':1}
  • for key in font_map:
  • font_map[key] = font_dict[font_map[key]]
  • print(font_map)
  • for key in font_map:
  • print('&#' + str(key) + ';')
  • page_text = page_text.replace('&#' + str(key) + ';', str(font_map[key]))
  • print(page_text)

效果:

在这里插入图片描述
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门