python反爬虫_python爬虫反反爬,你几乎可以横扫大部分 css 字体加密的网站

原标题:python爬虫反反爬,你几乎可以横扫大部分 css 字体加密的网站

你已经知道了对方是

如何自定义字体加密的了

4004cb61649b4661bf079f666b9bd909.jpeg

你要想去反反爬

你就要先站在对方的角度去思考问题

有句话这么说来着

“知己知彼,才能那啥”

74672cb5b22e4dcc9540362fd5f3edca.jpeg

那么对于像猫眼电影、大众点评等等

那样的 css 自定义字体加密

应该怎么破呢?

接下来就是

学习 python 的正确姿势

6d534f63a1f545a8ba399c1a862d23c6.jpeg

有人说了

不就是把字体通过 unicode 编码吗?

a5900ee0d4a743c997009c8f58867f80.jpeg

那就简单了啊

把每个字的编码找到

然后使用字典把编码和对应的字对应起来

抓取分析的时候

直接替换不就得了

a0521620ce0d42fb918d3b2dea6832ee.gif

有道理是有道理

但是

如果我每次返回给你的编码都不一样呢?

你说死不死

6e3e7a23f977407088221a0d6cc3d961.jpeg

好了好了,先别哭得那么舒服

我们来看看天猫电影票房榜单的页面

https://maoyan.com/board/1

1640de1da6524dff904977d812c20ed1.jpeg

093d5790a269496c9a5184eb819d7869.jpeg

正如你所看到的那样

这里也使用了字体加密

通过源代码我们可以看到

font-face这里制定了字体文件路径

78f2d8f4ad064fdf9d6a1edaa5ab1773.jpeg

还是熟悉的配方

熟悉的味道~

4b206f7b161745e2944d72d66bc81929.jpeg

不过小老弟

还是不要开心太早

刷新几次你就会发现

(盯着下图 2 秒钟)

2dae0ae0e2004aa99d346ca2a0bb5ed7.gif

看到没有

字体文件一直在变

woc!

玩呢?

c399b7cd0872436587c603bb52b3d614.jpeg

136f50e8b585455dbb89b59c29889472.jpeg

我们先把字体文件下载下来

# 把整个页面搞下来

url = 'https://maoyan.com/board/1'

html = download_html(url).decode('utf-8')

用正则把字体文件名拿一下

font_file_name = re.findall(r'//vfile.meituan.net/colorstone/(w+.woff)', html)[0]

拿到了文件名之后就构建一下url

然后把字体文件下载下来

url = 'http://vfile.meituan.net/colorstone/' + font_file_name

font_file = download_html(url)

接着把字体文件写到本地文件中

with open('fonts/' + font_file, 'wb') as f:

f.write(new_file)

使用 fontTools 来获取字体

如果你之前没安装的话要安装才能用

接着我们把字体文件保存为 xml

font = TTFont('fonts/' + font_file)

font.saveXML('./'+font_file+'.xml')

bcd7dbd944f4464bb053c64c40b01ccc.jpeg

快打开打开看看

e21d041fbf1244098fb8e22e368d5526.jpeg

哇,这些玩意

有点眼熟啊

这不就是加密的 unicode 码么

左边的 id 难道就是对应的数字?

7e8592b557f84733a0671875b80c6191.jpeg

恩没那么简单

就能找到聊得来的伴

尤其是在看过了那么多背叛

总是....

31ae416ed25e44609bf182a5f80d4fe9.jpeg

不好意思

走错片场了

回到我们刚刚的 xml 文件

往下拉一下

可以看到这个

284ab368294b46f2941fdf64cee67e47.jpeg

这里每一个编码都对应一个 TTGlyph 对象

从各种 x y 坐标可以猜测

它应该是用来绘制一个字的

我们把任意一个对象复制一下

然后用 matplotlib 根据坐标画个图试试看

import matplotlib.pyplot as plt

import re

str = """"

.....此处省略一点代码

"""

x = [int(i) for i in re.findall(r'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值