一.前言
最近有个需求是要爬美团外卖的,发现除了app那边h5这里还有一个入口。那肯定就这个了卅,比较JS逆起来还是要比安卓方便一点的,登录这里就不说了,只能用手机号收验证码登录而且一些必要的参数都是服务器那边返回的不是本地生产。还是主要说一下它的字体加密。
其实就是这个啦,我估计有不少人都遇到过这种反扒措施但都没有美团的这个那么令人难受。之前的某些网站用这种反爬措施多少都能从转出来xml文件中找到一些规律,但美团的是完全没有规律的(至少我找了一上午是没找到)不过自古有反爬就有反反爬就有反反反爬就有反反反反爬 [狗头]。
二.准备环境
- python
- selenium Chrom
- tesseract 识别引擎
- fontTools
三.开始解析
整体的思路是我们拿到woff文件的地址然后自己通过html渲染出来,截图给Tesseract识别,然后返回一个对应的Map就可以直接用,理论上是所有的woff加密都可以用这种方法来解决的。
一般woff文件地址都在网页的源码里全局搜索一下 font-face就能找到了,美团的就是在/waimai/mindex/home
这个里面。
拿到woff文件地址后下载下来通过py的fontTools可以得到被加密后的编码,这个留着写html和最后生成映射的时候用。
有了woff文件的地址和加密后的编码,就可以把他们写到自己的html里。
html的代码是这样的:
展现出的效果是这样的:
字正腔圆有没有,给狗狗都能识别出来 [狗头]。
下一步就是控制selenium打开生成后的html,用它自带的一个根据标签截图。可以准确的定位到你的字体哪里。
有了图片后就交给Tesseract识别去吧,只需要一行代码。
准确率不能说是100%吧,只能说是120%.(我只试了数字,你们有需要的话可以试一下汉字)
这是最后的运行的结果:
(第一次写文章,各位大佬轻点点评)