字体反爬应该是比较常见的反爬手段了,常见于招聘网站平台,相信很多不少人都遇到过,特征比较明显,而且限制难度愈发增加,比如随机替换字体库。
字体反爬最关键的是确定字体库(前提),找到映射关系(关键),然后直接替换即可!
在学习实践lideSky字体反爬(第三题好像放弃了)的过程中找到一个替代的练手网站,闪职网,字体反爬比较简单,适合本渣渣这种新手练习学习使用。
练手网站:http://shanzhi.spbeen.com/
感谢作者提供练手网站平台!
特征:关键数字信息网页前端显示和网页源码显示不一致,网页源码显示一定规律的乱码特征
需要说明的是该网站还有无限断点调试反爬,直接在该处永不断点解决!
为什么说这个字体反爬网站比较简单适合练手:
1.字体文件比较明显,就在网页开头的样式表中,而且字体文件单一,没有字体库,会随着网页刷新更换字体文件;
2.字体文件中字体映射关系一目了然,打开即可看到相应的映射关系,一目了然。
这里简单说下,字体文件打开及分享工具:
最后在简单分享一个几个代码片段:
字体获取:
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')
字体映射:
#映射
number_map = {
"9F92":0,
"9EA3":1,
"993C":2,
"958F":3,
"9FA4":4,
"9476":5,
"9A4B":6,
"9F64":7,
"9FA5":8,
"9E3A":9
}
月薪转换:
#转换月薪
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
招聘人数转换:
#转换招聘人数
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
本文分享自 Python与SEO学习 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!