评论页有特殊的字体加密方式(或者说。。应该叫字体加密吧?),刚开始我还没发现 emm

github链接

观察评论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

Unknown Unknown Unknown Unknown

反人类?是反小偷吧

    Sniper · 2021-03-13 14:12

    Unknown Unknown Unknown Unknown

    如果你认为是,那就是~

Oct · 2021-03-29 21:44

Unknown Unknown Unknown Unknown

大众点评的评论现在好不好爬取呀,在写小论文需要爬取数据,真的对于一个毫无基础的文科生来说太难了o(╥﹏╥)o

    Sniper · 2021-04-02 20:37

    Unknown Unknown Unknown Unknown

    很难,但是你可以去github看我的代码,自己运行下

oy · 2021-04-29 15:58

Unknown Unknown Unknown Unknown

第一次执行还可以正常获取到数据,但是第二天后面就出现AssertionError。python3.7。再也执行不了。

    Sniper · 2021-05-09 14:42

    Unknown Unknown Unknown Unknown

    代码bug 是由于被ban之后的处理操作传入变量异常导致。已经改过了

回复 Oct 取消回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用*标注