python,css渲染的雪碧图加密文字

有些网站的文字内容使用雪碧图加密,
网站显示的内容
在这里插入图片描述
源代码的内容
在这里插入图片描述

雪碧图
在这里插入图片描述
css
在这里插入图片描述
在这里插入图片描述
网站根据css精灵图坐标渲染页面,首先我们要把css拿下来存到本地,然后筛选自己需要的

import re,requests
from lxml import etree
with open('111.css','r',encoding='utf-8') as f:
    a = f.read()

b= re.sub(r'\s','',a)
b=re.findall(r'(xpy[\d\D]*?})',b)

css_list=[]
for i in b:
    b=re.findall(r'(.*?){background:-(.*?)px-(.*?)px;}',i)
    a=b[0] #元祖
    a = list(a) #转为列表
    css_list.append(a)
#用正则筛选css中渲染文字的所有属性
#筛选后的格式:[['name1','x轴坐标','y轴坐标'],['name2','x轴坐标','y轴坐标'],]

筛选后的内容
在这里插入图片描述

arrtlist=[]
for i in css_list:
    alist=[i[0],float(i[1]),float(i[2])]
    arrtlist.append(alist)
#把坐标转为数字格式
sortlist=sorted(arrtlist,key=lambda x: (x[2],x[1]))
#先根据行排序,再根据列排序,
num=[]
for i in sortlist:
    if i[2] not in num:
        num.append(i[2])
#取出每一行的坐标,去重
print(num)
num_list={}
for i in sortlist:
    if i[2] in num:
        num_list[i[2]]=i[1]+14
#14,为每一个字的宽度
#取出每一行的宽度,以行坐标作为字典的键,值作为值

vel=[]
for i in num_list:
    vel.append(num_list[i])
vel.insert(0,0)

#在最前面添加一个0,因为第一行不需要添加上一行宽度

sumall=[]
vellist=0
for i in vel:
    vellist+=i
    sumall.append(vellist)
#让每一个值等于全面的所有值相加,

print(sumall)
key_ve={}
for i in range(len(num)):
    key_ve[num[i]]=sumall[i]
#使每一行的坐标对应添加前几行的宽度和

在这里插入图片描述

dictlist={}
for i in sortlist:
    for j in key_ve:
        if i[2] == j:
            # dictlist.append(i[1]+key_ve[j])
            dictlist[i[0]]=int((key_ve[j]+i[1])/14)
print(dictlist)
#循环css列表,使name对应索引

在这里插入图片描述


with open('miwen.txt','r',encoding='utf-8') as f:
    wenzilist=f.read()
wenzilist=re.sub(r' ','',wenzilist)
#读取雪碧图,去掉空格,使全部值成为一行
for i in dictlist:
    dictlist[i]=wenzilist[dictlist[i]]

最后dictlist字典就是css名对应着雪碧图中的文字
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值