python处理字体(动态字体库)

根据公司的业务需求,需要抓取一个企业信息的数据查询网站做公司内部的业务支撑,网站网址https://www.weimao.com/search?key=阿里巴巴&type=enterprise&filter=,这个网站打开的时候页面上面的数据是正常显示的,经过仔细分析调试发现它的反爬机制是字体反爬,一个简单而又特殊的字体反爬,为什么说它简单而又特殊呢?因为它是字体反爬但是它的字体文件的编码不会随着页面的刷新而刷新,但是它的字有点多390个字,特殊在于它不像我们常见的反爬网页源代码显示的是编码而是中文汉字,这样就起到了混淆的作用。

目标分析

我们先打开该网站 微猫搜索
在这里插入图片描述
可以发现浏览器Elements里的(渲染后)段落数据不一样,简直词不达意,但是段落里的有些字还是在页面渲染是正确的,比如网络两字,页面看到的和渲染的是一样。再看阿里两个字在Elements里显示的是 要 识 两个字,我们可以确定这是一个字体反爬,根据之前的经验我们打开源码搜索woff可以看到
在这里插入图片描述
发现在网页源码中是通过CSS进行动态加载进来的字体文件,我们知道该网站编码实现了自己的一套字体编码文件,那么我们可以下载这个字体文件查看一下是什么内容,下载完成之后我们在百度搜索百度WOFF打开字体文件查看
在这里插入图片描述
经过测试之后发现这个文件并不是之前那种直接对应的编码进行固定替换的,然后每一次新的请求该字体文件也是随机的,
在这里插入图片描述
在这里插入图片描述
我们仔细分析发现每个字体对应的编码是一样的,我们把编码进行替换用python的chr()函数解密试下发现就是如猜测的一样
在这里插入图片描述

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200818110258165.png#pic_center

在这里插入图片描述
找到了它的编码对应的规律,接下来我们进行做一个字典映射然后批量替换就可以了,首先,我们需要先定义好,字体以及编码后的映射关系
在这里插入图片描述

在这里插入图片描述

实现方案

import requests
import re
import hashlib
from qy_search.common import REQ,get_log,ABY
from lxml.etree import HTML
from fontTools.ttLib import TTFont

from lxml import etree


class WM_Search(REQ):

    def __init__(self):
        super(REQ).__init__()
        self.s = requests.session()
        self.s.headers.update({
   
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
        })
        self.proxy, self.ipItem = ABY()
        self.IPcount = 0
        self.log = get_log()
        self.baseUrl = 'https://www.weimao.com/search?key={}&type=enterprise&filter='

        self.str_name = ['.', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
             'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e',
             'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
             '七', '万', '三', '上', '东', '中', '主', '么', '义', '乐', '九', '乱', '事', '二', '于', '亚', '些', '交', '亦', '京', '仍',
             '从', '代', '令', '任', '企', '会', '传', '但', '体', '作', '使', '便', '保', '信', '修', '倒', '候', '假', '像', '儿', '党',
             '全', '八', '共', '其', '具', '写', '准', '击', '分', '刘', '制', '前', '力', '功', '加', '务', '包', '化', '区', '半', '华',
             '南', '卫', '历', '原', '县', '参', '又', '友', '取', '另', '只', '叫', '可', '台', '司', 
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值