前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >字体反爬,Python爬虫练习网站闪职网字体反爬练手解析!

字体反爬,Python爬虫练习网站闪职网字体反爬练手解析!

作者头像
二爷
发布2024-03-05 15:55:14
1900
发布2024-03-05 15:55:14
举报
文章被收录于专栏:二爷记

字体反爬应该是比较常见的反爬手段了,常见于招聘网站平台,相信很多不少人都遇到过,特征比较明显,而且限制难度愈发增加,比如随机替换字体库。

字体反爬最关键的是确定字体库(前提),找到映射关系(关键),然后直接替换即可!

在学习实践lideSky字体反爬(第三题好像放弃了)的过程中找到一个替代的练手网站,闪职网,字体反爬比较简单,适合本渣渣这种新手练习学习使用。

练手网站:http://shanzhi.spbeen.com/

感谢作者提供练手网站平台!

特征:关键数字信息网页前端显示和网页源码显示不一致,网页源码显示一定规律的乱码特征

需要说明的是该网站还有无限断点调试反爬,直接在该处永不断点解决!

为什么说这个字体反爬网站比较简单适合练手:

1.字体文件比较明显,就在网页开头的样式表中,而且字体文件单一,没有字体库,会随着网页刷新更换字体文件;

2.字体文件中字体映射关系一目了然,打开即可看到相应的映射关系,一目了然。

这里简单说下,字体文件打开及分享工具:

  1. 在线字体编辑器 :https://font.qqe2.com/
  2. 字体编辑软件 :FontCreator
  3. 如果需要通过python去读取识别字体文件里面的内容 :pip install fontTools ‐i https://pypi.tuna.tsinghua.edu.cn/simple

最后在简单分享一个几个代码片段:

字体获取:

代码语言:javascript
复制
import requests
from fontTools.ttLib import TTFont


def get_ttf():
    url="http://shanzhi.spbeen.com/static/fonts/szec.ttf"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
    }
    response = requests.get(url=url, headers=headers, timeout=6)
    with open("szec.ttf",'wb') as f:
        f.write(response.content)

    print("保存字体文件成功!")

def get_xml():
    font = TTFont('szec.ttf')
    font.saveXML('szec.xml')

字体映射:

代码语言:javascript
复制
#映射
number_map = {
    "9F92":0,
    "9EA3":1,
    "993C":2,
    "958F":3,
    "9FA4":4,
    "9476":5,
    "9A4B":6,
    "9F64":7,
    "9FA5":8,
    "9E3A":9
}

月薪转换:

代码语言:javascript
复制
#转换月薪
def get_people_salarys(salarys):
    people_salarys=[]
    for salary in salarys:
        salary=salary.split(";")
        salary=salary[:-1]
        nums=""
        for key in salary:
            key=key[-4:]
            key = key.upper()
            num=number_map[key]
            print(key,num)
            nums=f'{nums}{num}'
        print(nums)
        people_salarys.append(f'{nums}¥/月')

    print(people_salarys)
    return people_salarys

招聘人数转换:

代码语言:javascript
复制
#转换招聘人数
def get_people_numbers(peoples):
    people_numbers=[]
    for people in peoples:
        key=re.findall(r' 招聘&#x(.+?);人',people)[0]
        key =key.upper()
        people_number=number_map[key]
        print(key,people_number)
        people_numbers.append(f'招聘{people_number}人')
    print(people_numbers)

    return people_numbers
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-02-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python与SEO学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档