栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

pyhton爬虫(简单过字体加密)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

pyhton爬虫(简单过字体加密)

1. 找到反爬内容确定字体存放位置


定位到正则匹配

import re
from fontTools.ttLib import TTFont
import requests
headers = {
       "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36 Edg/101.0.1210.39"
}
url= 'https://www.maoyan.com/board/1?timeStamp=1652605412237&channelId=40011&index=8&signKey=bace7e65a24e717ead8cf5d252c0a1ac&sVersion=1&webdriver=false'

r= requests.get(url=url,headers=headers).text
with open('猫眼榜单.html','w',encoding='utf8') as f:
        f.write(r)
#先把html下载下来便于分析
with open('猫眼榜单.html','r',encoding='utf8') as f:
        html = f.read()
#匹配字体文件
woff_url=re.findall('@font-face.*?format.*?url("(.*?)");}',html)[0]  
response = requests.get(url = 'http:'+woff_url).content
with open('猫眼榜单.woff','wb') as f:   
#下载
    f.write(response)
2. 把woff文件保存为xml进行分析字体文件,找到规律
font = TTFont('猫眼榜单.woff')

如果借助xml找不到规律的话,打开woff文件(主要找到字体匹配规则

发现woff字体顺序和cmap对应的顺序是对应的

3. 拼凑数据
num = [9,0,7,3,2,4,6,8,1,5]
cmap = font['cmap'].getBestCmap()
print(cmap)
dict={}
for key,value in cmap.items():
    key=hex(key).replace('0x',"&#x")
    dict[key]=value
print(dict)
i=0
for key in dict.keys():
    if key=='x':
        continue
    else:
        dict[key]=num[i]
    i+=1
print(dict)

#得到:
'''{120: 'x', 57628: 'uniE11C', 57708: 'uniE16C', 58724: 'uniE564', 58770: 'uniE592', 59076: 'uniE6C4', 61163: 'uniEEEB', 61546: 'uniF06A', 61913: 'uniF1D9', 61946: 'uniF1FA', 62555: 'uniF45B'}
{'x': 'x', '': 'uniE11C', '': 'uniE16C', '': 'uniE564', '': 'uniE592', '': 'uniE6C4', '': 'uniEEEB', '': 'uniF06A', '': 'uniF1D9', '': 'uniF1FA', '': 'uniF45B'}
{'x': 'x', '': 4, '': 8, '': 2, '': 9, '': 1, '': 3, '': 0, '': 5, '': 6, '': 7}'''
4. 最后替换真实的数据
for key,value in dict.items():
          html=html.replace(key+';',str(value))
with open('猫眼榜单解密.html','w',encoding='utf-8')as f:
     f.write(html)

这里其实有点取巧,当字体顺序变了,就不适用了,还是要找规则变化

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/887496.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号