实习僧字体反爬

大学实习或刚大学毕业的时候肯定对工作很着急,相信不少的同学都在实习僧这个平台找到了一份适合的工作,身为爬虫爱好者肯定要研究一下这个网站呀,看看有没有啥反爬,我最开始发现的就是字体反爬,那么咱就说说实习僧的字体反爬吧。

  1. 首先 确定要爬取的页面(就是岗位详细信息)不需要登陆就能查看
    在这里插入图片描述

  2. 查看源码 看一下数据有没有被加密(就是有没有字体反爬)
    在这里插入图片描述

  3. 查找字体加密文件(无非就是两种 1,一长串base64加密后的字符串,2,字体文件地址)本网站属于第一种
    在这里插入图片描述

  4. 用正则 获取字体文件数据写入到woff文件中,并转化为xml文件,让我们查看
    在这里插入图片描述

经过多次请求发现每个字体文件里面的文字和顺序都是不变的,变得只是对应的name(就是每个字的标识,看字体文件就知道了,都有一个name属性),我们只需要每次请求吧name的顺序给找出来和文字对应,就可以了
5. 获取正确排序的name
一般的字体文件我们都是用 getGlyphOrder() 或者getBestCmap() 来获取name,然而这个网站还有一个坑就是你获取出来的name并不是按照你所看到的文字顺序(上一步的文字)排列的。name还有一个id属性
在这里插入图片描述
经过我的观察正确的顺序就是根据id来的,用正则吧正确的name取出来就行了。和文字形成对应关系
6. 跟据cmap里面的对应关系和上一步得出的name和文字的关系,得出网页源码的特殊字符和文字的对应关系
代码如下(代码没有优化,是和我的思路一样一步一步往下走的)创作不易 喜欢的同学点下一键三连吧

import requests
from lxml import etree
import base64
import re
from fontTools.ttLib import TTFont
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36"
}
url = 'https://www.shixiseng.com/intern/inn_fcoow5bdpkdh'

ret = requests.get(url=url,headers=headers).text
with open('shixiseng.html','w',encoding='utf8') as f:
    f.write(ret)

with open('shixiseng.html','r',encoding='utf8') as f:
    ret = f.read()
ba64 = re.findall('base64,(.*?)"\)}',ret)[0]
b= base64.b64decode(ba64)
with open('2.woff','wb') as f:
    f.write(b)
font =TTFont('2.woff')
font.saveXML('2.xml')

str= '0123456789一师X会四计财场DHLPT聘招工d周|端p年hx设程二五天tCG前KO网SWcgkosw广市月个BF告NRVZ作bfjnrvz三互生人政AJEI件M行QUYaeim软qU银y联'
font_dict={}
with open('2.xml') as f:
    xml = f.read()
temp1 = re.findall(r'<GlyphID id="(\d+)" name="(.*?)"/>',xml)
temp2 = list(set(re.findall(r'<map code="(.*?)" name="(.*?)"/>',xml)))
print(temp1)
print(temp2)
for x,y in temp1[2:]:
    for e,t in temp2:
        if y==t:
            font_dict['&#x'+e[2:]]=str[int(x)-2]
print(font_dict)

with open('shixiseng.html','r',encoding='utf8') as f:
    ret = f.read()
for i in font_dict:
    ret = ret.replace(i,font_dict[i])
print(ret)



  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
【为什么学爬虫?】        1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到!        2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是:网络请求:模拟浏览器的行为从网上抓取数据。数据解析:将请求下来的数据进行过滤,提取我们想要的数据。数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是:爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫字体反爬识别等。Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求!【课程服务】 专属付费社群+定期答疑

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱笑的光头强

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

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

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

打赏作者

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

抵扣说明:

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

余额充值