教大家用python爬取猫眼数据,破解里面的字体woff最新

爬取数据不难,恶心的是各网站的各种反爬技术,替换字体,精灵图,数据加密等等,猫眼就是用到字体替换,简单来说就是字体映射,

首先先导入库,没有先pip安装

from fontTools.ttLib import TTFont

作用是把woff字体文件转成xml文件,

woff字体文件在猫眼页面css哪里

html页面位置

@font-face {
      font-family: stonefont;
      src: url('//vfile.meituan.net/colorstone/83d4dbb88976ee21d2cb2620b6051da23168.eot');
      src: url('//vfile.meituan.net/colorstone/83d4dbb88976ee21d2cb2620b6051da23168.eot?#iefix') format('embedded-opentype'),
           url('//vfile.meituan.net/colorstone/636dfb48d34fec199c62eb80acb2830b2080.woff') format('woff');
    }

    .stonefont {
      font-family: stonefont;

font=TTFont('./猫眼2084_new.woff')#读取woff文件
# font.saveXML('./m.xml')#转成xml

xml文件打开如下图

扫描二维码关注公众号,回复: 4794204 查看本文章

先找出数字的规律,然后再提取数据再替换就行了,那么问题又来了,猫眼每次刷新页面对应数字的位置又不一样,那之前找出来的规律是不是没有了?所以还需要进一步的处理,

第一次获取字体的规律

dict={}

num = [6, 2, 9, 0, 1, 8, 4, 3, 7, 5]
list=font.getGlyphOrder()[2:]
for n,p in zip(list,num):
    dict[n]=p

先把第一次获取的字体规律对应好合成一个字典,

然后再通过

getGlyphNames()对象的方法对应起来就行了

看代码吧

font=TTFont('./猫眼2084_new.woff')#读取woff文件
# font.saveXML('./m.xml')#转成xml
num = [6, 2, 9, 0, 1, 8, 4, 3, 7, 5]
list=font.getGlyphOrder()[2:]
print(list)
for n,p in zip(list,num):
    dict[n]=p
print(dict)
font1 = TTFont('./猫眼222字体.woff')  # 读取新的woff文件
# font1.saveXML('./m999.xml')  # 转成xml
ff_list=font1.getGlyphNames()#返回一个对象
ff_news=font1.getGlyphOrder()
for fo in ff_news:
    fo2=font1['glyf'][fo]
    for fff1 in list:
        fo3=font['glyf'][fff1]
        if fo2==fo3:
            print(fo,dict[fff1])

关系对应起来了

那么剩下来把提取的字体替换就行了

因为

显示是&#x

所以把字符uni替换成&#x

这就用到字符串方法了replace()

效果如图

好了,还有天眼网站的反爬也挺恶心,只要找到字体的规律就可以了

猜你喜欢

转载自blog.csdn.net/weixin_42385951/article/details/85322150