前言:
之前写的抓取大众的商家信息和点评评论星级,前两篇博文可以自行查阅,后面经常有人问我评论信息怎么抓取,因为以前评论部分没有加密,如今大众点评的评论信息做了前端字体加密,因此一般不会完整的抓取到信息,今天做一下更新。
前两篇博文:
大众点评评论抓取,这个是老版本的,但是注意点还是可以看看的,以免被反爬。
本篇博文更新于2018/12/20,针对目前加密方式可行,未来不可知。
先说说它怎么做了加密吧。
如下图:部分字体被<span>标签包含,实际它是一张svg背景图,用css样式控制雪花图显示加载,并且可以看到他的css的background属性,可自行更改看看效果,注意字体width:14px,这个后面为解密有用。
思路:
1. 获取评论部分的完整HTML样式,把整个内容用list存起来;
2. 获取css样式,样式在源码的位置,如下图,我们需要的是每个span标签里的class属性值,因为它对应background坐标信息。
3. 从css样式中动态取svg图片链接,生成字典库,然后用第二步的css坐标经过处理,查找真实字所对应的值,并返回最终真实评论。
步骤:
图一各标签位置还是需要了解一下的。
一、查看源码,知道css样式链接在哪里,保存该链接。
二、第一步获取的css链接样式里会有一个background-image标签,里面包含加密字体的svg路径,保存该路径,同时将该css文件的.*****{background:-*,-*}做成字典保存起来。
敲黑板了:图片一中提到过字体样式宽度为14px,因此我们把获取的background的x坐标/14,就是最终加密字体svg中的位置,svg每一行的字符串可转为数组存储,这样就能建立对应关系。background的y坐标要和svg中的<path>中的值比较,后续说。
三、这是加密字体的svg文件,注意看<path> 标签,它的id对应后面<textPath>标签的href值,它的d值就很有意思,也是解密的关键。
敲黑板了:步骤二中提到过background的y值,再和d列的M0后面值做比较就有意思了,比如
.gqi4j {background: -98.0px -130.0px;} 中的y:-130,取正数130,小于<path>标签中的d属性第二列的174这个值,则对应加密字库实际y轴为174,对应的id=4,就是<textPath>中的href标签,也就是加密字体的y轴坐标,