大众点评密文解密

  1. 大众点评条评论与人均价格加密对加密字体进行解密QQ截图20221108210138.png

QQ截图20221108210253.png
通过对大众点评的网页文本分析发现在其网页中存在css文件其中存在加密字体文件
QQ截图20221108210528.png
点开加密文件
QQ截图20221108210650.png
找到.shopNum再在其中找到woff文件,通过分析woff文件就是加密字体的文件
由于这份文件是实时在更新需要通过程序对以上操作实现自动化
程序步骤:
对首页进行响应获得网页源码-->通过对源码进行正则表达式提取出.css文件--->对.css进行requests响应QQ截图20221108211327.png
进入css网页QQ截图20221108211515.png
-->对此网页继续进行响应,下载加密字体的文件(woff文件)转化成xml文件(可以让计算机打开)进行映射解密

import requests
import re
from fontTools.ttLib import TTFont
import os
from 大众点评爬取.font_doc.config import texts
import logging
logging.basicConfig(level=logging.CRITICAL) # 忽略警告
class Spider():
    def __init__(self):
        self.url = "https://www.dianping.com/lanzhou/ch10/g110"
        self.headers = {
            'Cookie': 'fspop=test; cy=299; cye=lanzhou; _lxsdk_cuid=1845684b879c8-0feed98994688a-26021e51-144000-1845684b879c8; _lxsdk=1845684b879c8-0feed98994688a-26021e51-144000-1845684b879c8; _hc.v=df25ceae-472c-235a-b02a-be0900fd3858.1667898849; Hm_lvt_602b80cf8079ae6591966cc70a3940e7=1667898850; _lx_utm=utm_source%3DBaidu%26utm_medium%3Dorganic; s_ViewType=10; Hm_lpvt_602b80cf8079ae6591966cc70a3940e7=1667898870; _lxsdk_s=1845684b879-80f-bde-22e%7C%7C46; s_ViewType=10',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
        }

    def get_html_data(self):
        result = requests.get(url = self.url,headers=self.headers).text
        # print(result)
        return result

    def get_font_url(self,data):
        """
        获取加密字体文件地址
        解析加密字体
        :return:
        """
        # 通过正则表达式获取  <link rel="stylesheet" type="text/css" href="//s3plus.meituan.net/v1/mss_0a06a471f9514fc79c981b5466f56b91/svgtextcss/23c210eefad935350dcc36ffea0b93a4.css">
        font_url = 'https:'+re.findall(r'<link.rel="stylesheet".type="text/css".href="(.*?)">',data,re.S)[1]
        print(font_url)
        font_data = requests.get(font_url).text
        # print(font_data)
        # 获取加密字体的woff文件
        font_woff = 'https:'+re.findall(r'PingFangSC-Regular-shopNum".*?embedded-opentype.*?url\("(.*?)"\);',font_data,re.S)[0]
        print(font_woff)
        return font_woff

    def save_font_doc(self,data_s):
        """
        保存获取到的字体文件转化为xml文件
        :return:
        """
        font_doc = requests.get(data_s).content
        if not os.path.exists('font_doc'):
            os.mkdir('font_doc')
        dac_name = data_s.split('/')[-1]
        # print(dac_name)
        with open('font_doc'+'/'+dac_name,'wb')as f:
            f.write(font_doc)
        return dac_name

    def get_font_map(self,dac_name):
        """
        1.加载字体文件
        2.读取出内部的编码内容
        3.组建映射关系
        :return:
        """
        # 加载
        t = TTFont('font_doc'+'/'+dac_name)
        t.saveXML('font_doc'+'/'+'asddqw.xml')
        # 读取内部铭文
        font_names = t.getGlyphOrder()[2:] # 列表
        # print(font_names)
        # 进行映射
        code_dict = {}
        for index,value in enumerate(texts):
            # print(index,value)
            code_dict[font_names[index]] = value
        # print(code_dict)
        # 再次组建最终的映射关系 &#xif6b7:0
        jiemi_dict = {}
        for k,v in code_dict.items():
            # print(k,v)
            if k.startswith('uni'):
                key_ = k.replace('uni','&#x')
                key_a = key_+';'
                jiemi_dict[key_a] = v
            else:
                jiemi_dict[k] = v
        print("最终的映射关系:", jiemi_dict)
        return jiemi_dict

    def parse_rep_data(self,jiemi_dict,response):
        """
        将秘文替换成明文
        :param jiemi_dict:
        :param response:
        :return:
        """
        for k,v in jiemi_dict.items():
            response = response.replace(k,v)
        print(response)

    def run(self):
        result = self.get_html_data()
        font_woff = self.get_font_url(result)
        dac_name = self.save_font_doc(font_woff)
        jiemi_dict = self.get_font_map(dac_name)
        self.parse_rep_data(jiemi_dict,result)
        
if __name__ == '__main__':
    s = Spider()
    s.run()

解析结果
QQ截图20221108212328.png
替换成功!!!

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

特别注意:大众点评对账号和IP封锁频率很高,只进行字体解密,不进行翻页爬取操作

posted @ 2023-05-07 23:15  52_Hertz  阅读(62)  评论(0编辑  收藏  举报