您当前的位置: 首页 >  爬虫

不会翻墙的泰隆

暂无认证

  • 5浏览

    0关注

    31博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【爬虫进阶】字体解密——案例解析

不会翻墙的泰隆 发布时间:2022-08-01 17:30:43 ,浏览量:5

目录
  • 解析
  • 代码实现
  • 成果

解析
  • 打开网页,可以看到部分字体显示乱码,需要找到加密字体文件 在这里插入图片描述

  • 全局搜索woff文件,找到目标文件,随机点开一个 在这里插入图片描述

  • 打开目标源代码,可以发现上面文件中有字体css

在这里插入图片描述

  • 或者直接点击css,也能找到目标文件 在这里插入图片描述
  • 仔细观察,不难发现css中font-family,与网页中字体标签名称能对应上,说明哪些字体是用的哪个字体文件
代码实现
  • 请求css文件,通过正则匹配woff字体文件
def parse_css():
	css_url = "https://s3plus.meituan.net/v1/mss_0a06a471f9514fc79c981b5466f56b91/svgtextcss/f8df8335a7a73ab4c9bc6b3c2725eb2d.css"
	
    header = {
         'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
     }
	
     font_url_search = re.compile(r'font-family: "(.*?)".*?,url\("//(s3plus\.meituan\.net/v1/.*?\.woff)"\)')  # 文件匹配规则`在这里插入代码片`
     css_font_response = requests.get(url=self.css_url,headers=header) # 请求css

     font_url_list = font_url_search.findall(css_font_response.text) # 获取字体文件
     for font_name,font_url in font_url_list:
         font_response = requests.get(url="http://"+font_url,headers=header) #请求woff
         #将字体文件写入本地
         font_name = font_name.split("-")[-1]+".woff" #字体名称
         with open(font_name,'wb') as f:
             f.write(font_response.content)
                
  • 保存所有字体文件到本地 在这里插入图片描述

  • 地址标签名称是address,所以打开address.woff,利用某度字体编辑器解析字体文件 在这里插入图片描述 在这里插入图片描述 发现后4位字符一致,所以这个woff文件就是这个字体的加密文件

  • 处理编码与字体的对应关系

 def parse_font():
     font_file = TTFont('address.woff')
     #保存字体和字符编码的对应关系
     font_dict = json.dumps(dict(zip(font_file.getGlyphOrder(),FONT_LIST)))
     #写入本地
     with open("font_dict",'w') as f:
         f.write(font_dict)

在这里插入图片描述

  • json解码 在这里插入图片描述

  • 获取数据

 def parse_detail():
     """
     请求大众点评页面
     :return:
     """
     # self.parse_font()
    business_detail_url = "https://www.dianping.com/shop/l7lVHqOeu5S1lH3p"
    header = {
	        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
	    }
   	response = requests.get(url=business_detail_url,headers=header)
    html = etree.HTML(response.text)
    #地址
    address = html.xpath('//div[@id="J_map-show"]//span/e/text()')
    
    #读取本地字体对应文件
    with open('font_dict','r') as f:
        f_read = json.loads(f.read())
        for info in time:
            key = "uni"+json.dumps(info)[-5:][:-1] # 将前面&#x,后面的;去掉,转换为uni****
            if key in f_read:  
                print(f_read[key])
成果

在这里插入图片描述

点关注不迷路,本文若对你有帮助,烦请三连支持一下 ❤️❤️❤️ 各位的支持和认可就是我最大的动力❤️❤️❤️

在这里插入图片描述

关注
打赏
1658128969
查看更多评论
立即登录/注册

微信扫码登录

0.0406s