前言:
大众点评的评论信息做了前端字体加密,在PC端的展示数据是通过CSS来控制的,从网页上看不出来太大的区别,但是用普通的脚本取获取时,会发现数据是获取不到的,具体的源代码是下面这样的:
部分字体被标签包含,实际它是一张svg背景图,用css样式控制雪花图显示加载,并且可以看到他的css的background-image属性,可自行更改看看效果
这里我们看到了jazj3i这个变量对应的两个像素值(-163.0px, -89.0px)。这很重要,先记下来。
在这里我们看到了一个链接。
url(//s3plus.meituan.net/v1/mss_0a06a471f9514fc79c981b5466f56b91/svgtextcss/89f6aae013bd4d86187e127ed06c904d.svg)
你会发现,返回的是一些数字。
现在直接看源代码:可以看到这里面的几个关键数字:font-size:字体大小;还有y的值,y是个阈值,起的是个控制的作用。
jazj3i这个变量对应的两个像素值(-163.0px, -89.0px),前面的是控制用偏移量,后面的是控制用哪一段的数字集合,同时这里的值应该是4;
这里的值是72<89<=113,所以使用第三个段的数字集合;
因为font-size:12px,所以用163/12=13.58,向下取整13,那么我们数一下第13个数字是啥(从0开始数),没错,是4,和预期一样。
所以,这一反爬的思路就是:
1获取评论部分的完整HTML样式,
2 获取css样式,样式在源码的位置,如下图,我们需要的是每个span标签里的class属性值,因为它对应background坐标信息。
3. 从css样式中动态取svg图片链接,生成字典库,然后用第二步的css坐标经过处理,查找真实字所对应的值,并返回最终评论数
你会发现这个网页上不同的字段是由不同的css段来进行控制的,所以要找到这个评论数据对应的tag,在这里返回的值为jpz;而在获取地址时,tag就是wnc-;