前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >爬虫 | 五八字体反爬

爬虫 | 五八字体反爬

作者头像
用户6825444
发布2020-03-18 20:33:29
6480
发布2020-03-18 20:33:29
举报

前言

58二手车:

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

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

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

字体文件获取

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

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

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

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

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

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

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

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

字体映射

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

驋閏.齤

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

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

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

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

0x9a4b 对应 name 属性的 glyph00003

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

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

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

我们看看是否对应上了:

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 木下学Python 微信公众号,前往查看

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

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

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