Python之字体反爬详细操作

一、使用工具:Pycharm,High-Logic FontCreator(字体解析器)

二、字体反爬原理:将网页上爬取下来的数据进行解密,最后还原成网页最终呈现的效果即为字体反爬。

三、举例-爬取网站:        https://www.shixiseng.com/interns/iconfonts/file?rand=0.22862737400022937

https://www.shixiseng.com/interns?keyword=python&city=%E5%85%A8%E5%9B%BD&type=intern

具体思路如下:

  1. 导入TTFont库
    from fontTools.ttLib import TTFont
  2. 在爬取网站找到并下载爬取网站的字体解析文件(在爬取网站的源码中查找@font-face中url的网址,在搜索框中打开,自动下载的文件即为字体解析文件)
  3. 将下载的文件保存在项目文件同一级目录中(这样比较方便不用写路径)
  4. 读取下载后文件,通过ttf.save()将下载文件转化为ttf格式,在High-Logic FontCreator打开即可看到对应字符和对应的字符编码。
    # 读取下载后文件
    ttf = TTFont('file') 
     
    # 将下载后文件保存为ttf文件,方便在High-Logic FontCreator中打开
    ttf.save('file.ttf')  

    file.ttf打开文件显示大致如下

  5. 通过手动操作将字符与编码一一对应(可利用识图软件操作,将数据保存在file.csv文件中),将保存的csv文件读取成字符和字符编码一一对应的字典Unicode_dict。                                   读取csv文件
    with open('ttf.csv', 'r') as f:    # 读取csv文件中的Unicode数据
        reader = csv.reader(f)
        unicode_dict = {}
        for i in reader:
            unicode_dict[i[0].lower()] = i[1]
    打印字典Unicode_dict显示如下
  6. 利用爬虫爬取网页数据
    # 网页地址
    url = 'https://www.shixiseng.com/interns?keyword=web&city=%E5%85%A8%E5%9B%BD&type=intern'
    # 请求头
    headers = {
        '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'}
    
    # 获取网页源码
    res = requests.get(url, headers=headers)
    
    # 获取所需内容
    title = re.findall('<a href=".*?" title=".*?" target="_blank" class="title ellipsis font" data-v-2d75efc8>(.*?)</a>',res.text)
    获取到的title值打印显示:
  7. 循环title中的值和Unicode_dict中的key值
  8. # 保存字体解密成功的数据
    title_list = []
    
    # 把title中的每个值都拿出来   
    for i in title:
    
        # 把Unicode_dict中的每个key值都拿出来
        for j in unicode_dict.keys():
            # 比较 Unicode_dict中的key值是否存在于title中,
            # 存在就将title中对应的unicode_dict的key值与
            # unicode_dict的key对应的value值进行替换
            if j in i:  
                i = str(i).replace(j, unicode_dict[j])
        
        # 将整理替换后的title值添加到title_list中
        title_list.append(i)

    title_list打印结果如下:

  9. 字体转换前和字体转换后比较

四、总结

        字体反爬最麻烦的是将字体解析文件读取出来,并且要想办法让字符与编码一一对应,其中可以通过形成ttf文件进行手动转换,也可以通过形成xml文件找到<cmap>标签,通过读取中间的name和code再想办法转换形成字典,最后在通过将我们所需要转换的数据与字典中的数据一一比对再替换即可。

Python征指纹反爬是一种反爬虫技术,它通过识别请求中的特定特征指纹来检测和阻止爬虫。其中,JA3指纹是一种用于识别TLS客户端的指纹算法,可以在改变IP地址和User Agent(UA)的情况下仍然识别到请求的来源。 要在Python中修改JA3指纹,可以使用第三方库requests,并通过修改其源代码来实现。具体步骤如下: 1. 首先,安装requests库。可以使用pip命令运行以下命令来安装最新版本的requests: ```python pip install requests ``` 2. 导入requests库,并创建一个Session对象: ```python import requests session = requests.Session() ``` 3. 修改Session对象的headers属性,将请求头的User-Agent字段设置为自定义的值。这样可以隐藏默认的User-Agent,增加请求的隐蔽性: ```python session.headers['User-Agent'] = '自定义的User-Agent' ``` 4. 修改Session对象的TLS指纹(JA3指纹)。可以在网络上搜索到一些可以用于修改JA3指纹的Python库或代码示例,如。根据具体情况选择合适的方法来修改JA3指纹。 5. 使用修改后的Session对象发送请求。可以使用Session对象的get()或post()方法发送HTTP请求,并获取响应内容: ```python response = session.get(url) ``` 通过以上步骤,我们可以在Python中使用requests库来修改JA3指纹,从而提高爬虫的隐蔽性。请注意,根据网站的反爬虫策略,可能还需要进行其他处理,如处理验证码、使用代理IP等措施来进一步提高爬虫的成功率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简兮_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值