爬虫 | 五八字体反爬

源码共读

共 1043字,需浏览 3分钟

 ·

2020-03-12 23:24

作者丨木下瞳来源丨木下学Python



前言

58二手车:

https://sz.58.com/ershouche/pn2/?PGTID=0d100000-0000-4e81-5801-e3cfbaae2802&ClickID=120


fe1a75650ce416c4dd1021290b2664bc.webp



小编想爬一爬58同城的二手车,了解一下,爬取过程中在二手车的信息详情页,发现交易价的数字是加密过的:




我们来看一看怎么获取正确的数字。




字体文件获取

查看源代码发现,源代码里面返回的和我们右键检查的不一样:



fb762e05571aac7c9b8d9982c513125f.webp


这是因为现实源代码里的数字加密了后,渲染到前端,以那些牛鬼蛇神的样子出现的。

字体加密,就会涉及到字体文件,字体文件后缀一般为 woff,ttf,我们在源代码里面搜索,由于太长,分两张图:



65650eba97a62ce95c9175615dbc6a55.webp
c8b3f572d25b098b7865e51b6dec015f.webp


可以看到,这就是字体文件的链接内容,我们需要得到字体文件内容。

在这里看到了 base64,说明它后面这一串,也就是两个箭头之间的字符串的 base64 编码过的,这些字符串就是字体映射的内容。

src:url 后面一直到第二个箭头这段字符串是一个 url,访问这个链接,就会下载字体文件,由于 58 每一页的字体映射都不一样,这样每次请求会增加网络请求的时间。

所以我们采取 base64 解码,把两个箭头之间的字符串解码,解码的结果是二进制的,写入文件,后缀为 woff:


f0f4e77d751751e209947da8dad6b86e.webp


这样我们就获得了字体文件。




 字体映射 

由于我们不经过字体破解,直接爬取源代码得到的字体是:

驋閏.齤

这样的形式,我们就以这个来说明怎么转为正确的数字。

我们得到的字体文件,可以用 fontTools 库打开,我们需要另存为 xml 文件,这样是方便打开 xml 文件分析映射:


ef092963dfa1e8af37036cee9e14391c.webp


打开 xml 文件,有两个重要的部分:



f6d403ff0c834dc37c2893e86ca52210.webp


驋 我们来看,&# 对应 code 属性的 0

0x9a4b 对应 name 属性的 glyph00003

name 的值为 glyph00003 对应的 id 属性为 3

由于是从上往下是从 1 开始,所以需要减一,才是映射的数字

可以通过 xml 库读取 xml 文件来进行字体映射转换:


60f96097107540675c23b4ff91b562b5.webp


我们看看是否对应上了:


5774a2e7324320d02a401f75dd339c7c.webp
8cdd5df7c3cb0c08aa80987789c77ad6.webp
df643219ba00798500cd020929a1d69a.webp


这样我们字体反爬就破解了。

小编爬取的是深圳二手车的数据,爬虫已写好,想要爬虫的小伙伴可以去获取,来看看小编爬取的结果:


523f4dd517cfffbeceed44abc0253e55.webp

eea53815932b2eb13254add4faee9c7b.webp

近期精彩内容推荐:  

c3024302b6855aede464c65a2e215a3e.webp 程序员这碗青春饭,怎么吃得更久一点?

c3024302b6855aede464c65a2e215a3e.webp 顺丰小哥连升3级,国家授予特别奖!

c3024302b6855aede464c65a2e215a3e.webp 狠人 Spring Cloud 20000 字总结!

c3024302b6855aede464c65a2e215a3e.webp python实现文件自动归类




80bf2af2677ad7310e21a9b18599c5f5.webp

在看点这里28dd4c8a66c7426efc4a06b0f5e5dc06.webp好文分享给更多人↓↓

浏览 40
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报