评论页有特殊的字体加密方式(或者说。。应该叫字体加密吧?),刚开始我还没发现 emm
观察评论html页面,有一个很奇怪的地方,之前字体加密无非是编码加密,还能看到编码,这里就直接什么都没有,只有一个标签,然后这个标签就变成了一个字。
是字体加密?搜索半天,包括用匿名模式(这样会禁用浏览器缓存,防止有的时候字体文件已经缓存就拦截不到请求)检查,始终没有发现字体文件。
甚至连html里都没有信息我是没想到的。
后来突然想到,会不会还是和搜索页面类似,藏在主页html里的css。
搜索发现,果然有。
我们看到这个css文件,有那么回事了,和上面的加密参数差不多
随机搜索一个:
果然有,那么问题就来了,background又是什么呢?
我们继续观察这个css文件。
我们还可以在css文件里找到三个结构。而class里的 wxo、nxu、iql也对应的三类加密代码。
cc[class^="wxo"] {
width: 14px;
height: 16px;
margin-top: -7px;
background-image: url(//s3plus.meituan.net/v1/mss_0a06a471f9514fc79c981b5466f56b91/svgtextcss/3f32038c3e34ba3201be7f6c71204aad.svg);
background-repeat: no-repeat;
display: inline-block;
vertical-align: middle;
margin-left: -6px;
}
bb[class^="nxu"] {
width: 14px;
height: 22px;
margin-top: -1px;
background-image: url(//s3plus.meituan.net/v1/mss_0a06a471f9514fc79c981b5466f56b91/svgtextcss/1ac4280822fdd2f06038703fc416045c.svg);
background-repeat: no-repeat;
display: inline-block;
vertical-align: middle;
}
svgmtsi[class^="iql"] {
width: 14px;
height: 24px;
margin-top: -14px;
background-image: url(//s3plus.meituan.net/v1/mss_0a06a471f9514fc79c981b5466f56b91/svgtextcss/08ef8d8f10080d81ae3ba79ac999e6b8.svg);
background-repeat: no-repeat;
display: inline-block;
vertical-align: middle;
}
我们访问那几个svg链接:
wxo:
nxu:
最后一个iql就很多了(部分):
那我们猜测,这个px,根据常识应该是坐标这类,那是不是就是坐标呢?我们以这个为目标进行探索。
网页查看实在不方便,而且链接也是一个svg文件,我们使用python将svg文件下载回来:
import requests
url = 'http://s3plus.meituan.net/v1/mss_0a06a471f9514fc79c981b5466f56b91/svgtextcss/08ef8d8f10080d81ae3ba79ac999e6b8.svg'
# url = 'http://s3plus.meituan.net/v1/mss_0a06a471f9514fc79c981b5466f56b91/svgtextcss/3f32038c3e34ba3201be7f6c71204aad.svg'
r = requests.get(url)
with open('test.svg','wb') as f:
f.write(r.content)
发现这个是一个xml结构的文件。
通过各种比对呢(别问怎么比的了,反正就是各种尝试),终于得到了坐标的秘密。
就是每个字宽度14个像素,长度23个像素,然后根据px位置,计算出对应位置的文字即是最终结果 (2021年3月修改:其实字的大小不一样,需要根据textLength或类似标签动态解析) 。
目前还不确定这个映射是不是固定的(对比搜索页字体,是动态的),考虑到这个链接也可以在css中很容易的更改,技术上动态也很容易,有待继续观察。( 2021年3月修改: 是动态的,代码改为全动态解析)
ps:大众点评的反爬真的反人类,常规浏览都会触发人机验证,还搞这么麻烦的加密。
6 条评论
xxx · 2021-03-02 10:42
反人类?是反小偷吧
Sniper · 2021-03-13 14:12
如果你认为是,那就是~
Oct · 2021-03-29 21:44
大众点评的评论现在好不好爬取呀,在写小论文需要爬取数据,真的对于一个毫无基础的文科生来说太难了o(╥﹏╥)o
Sniper · 2021-04-02 20:37
很难,但是你可以去github看我的代码,自己运行下
oy · 2021-04-29 15:58
第一次执行还可以正常获取到数据,但是第二天后面就出现AssertionError。python3.7。再也执行不了。
Sniper · 2021-05-09 14:42
代码bug 是由于被ban之后的处理操作传入变量异常导致。已经改过了