破解大众点评 css加密

2 篇文章 0 订阅
1 篇文章 0 订阅

本文仅供学习。
还没有解过css加密,今天就来试一次,虽然也看过其他文章,但是自己动手解一遍熟悉的更快一些。

首先打开链接 http://www.dianping.com/shijiazhuang/ch10在这里插入图片描述
刷新网页后分析页面,结果是加密的。既然知道了是css映射,那就直接把字体文件下载下来。这个总共有三个字体文件,对应三种标签,shopnum,tagname,address,如图
在这里插入图片描述
找到css文件(css文件名字会变,大概率就在前几个,名字是一堆英文字母加数字的,点开后看preview就一目了然) 看到每个分类后边都有一个woff文件,直接下载下来,并记好哪个文件对应哪个分类。
在这里插入图片描述
下载一个这个工具可以打开woff文件,链接 https://www.high-logic.com/FontCreatorSetup-x64.exe(这个是64位的)
在这里插入图片描述
然后随便打开一个woff文件,是这样的(文件名字我已经改成了对应的,方便记)
在这里插入图片描述
我先发一个对应好的
在这里插入图片描述可以看到 在shopnum里边e61e 对应的是 4 ; e139 对应的是3。
在这里插入图片描述
然后按照流程:
1.请求到html
2.匹配所有的标签和加密字符 类似这样()
3.根据class选择是哪个woff里的字体 ,然后修改为解密后的字体
4.然后替换掉原来的html里的标签就可以

最后上代码:

#-*-coding:utf-8-*-
from fontTools.ttLib import TTFont
import requests,re

def get_fond():
    count_font = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '店', '中', '美', '家',
                 '馆', '小', '车', '大', '市', '公', '酒', '行', '国', '品', '发', '电', '金',
                 '心', '业', '商', '司', '超', '生', '装', '园', '场', '食', '有', '新', '限',
                 '天', '面', '工', '服', '海', '华', '水', '房', '饰', '城', '乐', '汽', '香',
                 '部', '利', '子', '老', '艺', '花', '专', '东', '肉', '菜', '学', '福', '饭',
                 '人', '百', '餐', '茶', '务', '通', '味', '所', '山', '区', '门', '药', '银',
                 '农', '龙', '停', '尚', '安', '广', '鑫', '一', '容', '动', '南', '具', '源',
                 '兴', '鲜', '记', '时', '机', '烤', '文', '康', '信', '果', '阳', '理', '锅',
                 '宝', '达', '地', '儿', '衣', '特', '产', '西', '批', '坊', '州', '牛', '佳',
                 '化', '五', '米', '修', '爱', '北', '养', '卖', '建', '材', '三', '会', '鸡',
                 '室', '红', '站', '德', '王', '光', '名', '丽', '油', '院', '堂', '烧', '江',
                 '社', '合', '星', '货', '型', '村', '自', '科', '快', '便', '日', '民', '营',
                 '和', '活', '童', '明', '器', '烟', '育', '宾', '精', '屋', '经', '居', '庄',
                 '石', '顺', '林', '尔', '县', '手', '厅', '销', '用', '好', '客', '火', '雅',
                 '盛', '体', '旅', '之', '鞋', '辣', '作', '粉', '包', '楼', '校', '鱼', '平',
                 '彩', '上', '吧', '保', '永', '万', '物', '教', '吃', '设', '医', '正', '造',
                 '丰', '健', '点', '汤', '网', '庆', '技', '斯', '洗', '料', '配', '汇', '木',
                 '缘', '加', '麻', '联', '卫', '川', '泰', '色', '世', '方', '寓', '风', '幼',
                 '羊', '烫', '来', '高', '厂', '兰', '阿', '贝', '皮', '全', '女', '拉', '成',
                 '云', '维', '贸', '道', '术', '运', '都', '口', '博', '河', '瑞', '宏', '京',
                 '际', '路', '祥', '青', '镇', '厨', '培', '力', '惠', '连', '马', '鸿', '钢',
                 '训', '影', '甲', '助', '窗', '布', '富', '牌', '头', '四', '多', '状', '吉',
                 '苑', '沙', '恒', '隆', '春', '干', '饼', '氏', '里', '二', '管', '诚', '制',
                 '售', '嘉', '长', '轩', '杂', '副', '清', '计', '黄', '讯', '太', '鸭', '号',
                 '街', '交', '与', '叉', '附', '近', '层', '旁', '对', '巷', '栋', '环', '省',
                 '桥', '湖', '段', '乡', '厦', '府', '铺', '内', '侧', '元', '购', '前', '幢',
                 '滨', '处', '向', '座', '下', '県', '凤', '港', '开', '关', '景', '泉', '塘',
                 '放', '昌', '线', '湾', '政', '步', '宁', '解', '白', '田', '町', '溪', '十',
                 '八', '古', '双', '胜', '本', '单', '同', '九', '迎', '第', '台', '玉', '锦',
                 '底', '后', '七', '斜', '期', '武', '岭', '松', '角', '纪', '朝', '峰', '六',
                 '振', '珠', '局', '岗', '洲', '横', '边', '济', '井', '办', '汉', '代', '临',
                 '弄', '团', '外', '塔', '杨', '铁', '浦', '字', '年', '岛', '陵', '原', '梅',
                 '进', '荣', '友', '虹', '央', '桂', '沿', '事', '津', '凯', '莲', '丁', '秀',
                 '柳', '集', '紫', '旗', '张', '谷', '的', '是', '不', '了', '很', '还', '个',
                 '也', '这', '我', '就', '在', '以', '可', '到', '错', '没', '去', '过', '感',
                 '次', '要', '比', '觉', '看', '得', '说', '常', '真', '们', '但', '最', '喜',
                 '哈', '么', '别', '位', '能', '较', '境', '非', '为', '欢', '然', '他', '挺',
                 '着', '价', '那', '意', '种', '想', '出', '员', '两', '推', '做', '排', '实',
                 '分', '间', '甜', '度', '起', '满', '给', '热', '完', '格', '荐', '喝', '等',
                 '其', '再', '几', '只', '现', '朋', '候', '样', '直', '而', '买', '于', '般',
                 '豆', '量', '选', '奶', '打', '每', '评', '少', '算', '又', '因', '情', '找',
                 '些', '份', '置', '适', '什', '蛋', '师', '气', '你', '姐', '棒', '试', '总',
                 '定', '啊', '足', '级', '整', '带', '虾', '如', '态', '且', '尝', '主', '话',
                 '强', '当', '更', '板', '知', '己', '无', '酸', '让', '入', '啦', '式', '笑',
                 '赞', '片', '酱', '差', '像', '提', '队', '走', '嫩', '才', '刚', '午', '接',
                 '重', '串', '回', '晚', '微', '周', '值', '费', '性', '桌', '拍', '跟', '块',
                 '调', '糕']


    #评分
    shopnum_list = TTFont('shopnum_2a20.woff').getGlyphOrder()[2:]
    #标签
    tagname_list = TTFont('tagname_464f.woff').getGlyphOrder()[2:]
    #地址
    address_list = TTFont('address_09e4.woff').getGlyphOrder()[2:]


    for f_index,f_value in enumerate(count_font):
        shopnum_dict[shopnum_list[f_index].replace('uni','&#x') + ';'] = f_value
        tagname_dict[tagname_list[f_index].replace('uni','&#x') + ';'] = f_value
        address_dict[address_list[f_index].replace('uni','&#x') + ';'] = f_value

def main():
    headers = {
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
        "Accept-Language": "zh-CN,zh;q=0.9",
        "Cache-Control": "max-age=0",
        "Connection": "keep-alive",
        "Cookie": "fspop=test; cy=24; cye=shijiazhuang; _lxsdk_cuid=1780fd116f7c8-0ec7a3b8d0b363-53e356a-1fa400-1780fd116f7c8; _lxsdk=1780fd116f7c8-0ec7a3b8d0b363-53e356a-1fa400-1780fd116f7c8; _hc.v=2acaf8e3-7981-fe66-af37-d4e3b3f417fa.1615173065; s_ViewType=10; _lx_utm=utm_source%3DBaidu%26utm_medium%3Dorganic; Hm_lvt_602b80cf8079ae6591966cc70a3940e7=1615173065,1615251712; Hm_lpvt_602b80cf8079ae6591966cc70a3940e7=1615252991; _lxsdk_s=1781589955a-823-3a6-f0%7C%7C2",
        "Host": "www.dianping.com",
        "Upgrade-Insecure-Requests": "1",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36"
    }

    url = 'http://www.dianping.com/shijiazhuang/ch10'

    response = requests.get(url,headers = headers).text

    #匹配出所有映射标签
    svgmtsi_lists = re.compile('(<svgmtsi class=".*?">.*?</svgmtsi>)').findall(response)

    #循环所有标签并替换为正常字体
    for svgmtsi_tag in svgmtsi_lists:
        svg_name = re.compile('<svgmtsi class="(.*?)">').findall(svgmtsi_tag)[0]
        font_key = re.compile('>(.*?)<').findall(svgmtsi_tag)[0]
        if svg_name == 'shopNum':  
            font_value = shopnum_dict[font_key]
            response = response.replace(svgmtsi_tag,'<svgmtsi class="shopNum">' + font_value + '</svgmtsi>')
        elif svg_name == 'tagName':
            font_value = tagname_dict[font_key]
            response = response.replace(svgmtsi_tag, '<svgmtsi class="tagName">' + font_value + '</svgmtsi>')
        elif svg_name == 'address':
            font_value = address_dict[font_key]
            response = response.replace(svgmtsi_tag, '<svgmtsi class="address">' + font_value + '</svgmtsi>')

    #最后匹配需要的数据就行了
    divs = re.compile('(<div class="txt">.*?<span class="comment-list">.*?</div>)',re.S).findall(response)
    for div in divs:
        title = re.compile('<h4>(.*?)</h4>').findall(div)[0]
        sorce = re.compile('<div class=".*?star_score_sml">(.*?)</div>').findall(div)[0]
        street = re.compile('<a href = ".*?" data-click-name="shop_tag_region_click" data-shopid=".*?".*?>(.*?)</a>').findall(div)[0]
        detail_address = re.compile('<span class="addr">(.*?)</span>').findall(div)[0]
        print(title)
        print(sorce)
        print(re.sub('<.*?>','',street))
        print(re.sub('<.*?>', '', detail_address))
        print('-------------------------------------')

if __name__ == '__main__':
    shopnum_dict = {}
    tagname_dict = {}
    address_dict = {}
    
    #对应好字体
    get_fond()
    print('shopnum_dict',shopnum_dict)
    print('tagname_dict', tagname_dict)
    print('address_dict', address_dict)
    
    #抓取并替换
    main()

抓取结果:
在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值