点评网的反爬设置在我们爬取点评网页的时候给我们造成了不小的障碍。在网页上我们看到的是这样的
网页上可以看到这家餐厅有1405条评论,人均387。但在分析页面源码的时候,我们却看不到网页上的数字,看到是这样的代码
点评网对数字做了处理,一些数字的信息像评论条数、人均、评分等都做了反爬保护。上面的网页中评论条数是1405条,但在页面源码中,除了第一个数字1以外,后面的数字我们看不到,都是一些像随机编码一样的css class。
如果我们仔细分析这个css class,其实是不难发现背后的原理的。
通过开发者工具,我们找到这个css的定义,可以看到是下面这样的
background-image属性里面是一个url,我们在浏览器里打开它,看到它的内容是
lc-mY1i 这个css class里面是一个background属性,定义了背景图片偏移的位置。
所以点评网上显示数字的原理就是通过设置不同的偏移位置,显示背景图片相应位置上的数字。我们可以想象背景图片的前面有一个窗口,窗口的大小刚好够显示一个数字。窗口是固定不动的,背景图片在后面移动,移动到不同的位置就能显示这个位置上的数字。
进一步分析背景图片,我们可以发现,这是一个SVG图片,图片中的数字可以在svg的源码中看到,如下
理解了原理后,我们用代码来实现一下解析的过程。
首先我们从点评的网页上找出css文件的url,代码如下
随后我们从css里找到背景图片的路径,并获取SVG图片中的每个数字
这个函数返回一个数组,数组的内容是SVG图片中的所有数字。
对于点评网页中的用css class表示的数字,我们来解析一下css class和数字之间的对应关系
这个函数返回的是一个字典,它的key是css class的名字,value是css class对应的数字在背景图片中的偏移量。
接下来,我们以评论条数为例,来获取点评上一个页面里每家餐厅的评论条数。先定义函数,用于获取评论条数
然后调用函数,爬一下页面中每家餐厅的评论条数
运行代码后,得到如下的结果
对照网页上的数据,可以看到,餐厅的评论条数都被正确的解析出来了。
●编号564,输入编号直达本文
●输入m获取文章目录
推荐↓↓↓
算法与数据结构
更多推荐《25个技术类公众微信》
涵盖:程序人生、算法与数据结构、黑客技术与网络安全、大数据技术、前端开发、Java、Python、Web开发、安卓开发、iOS开发、C/C++、.NET、Linux、数据库、运维等。
领取专属 10元无门槛券
私享最新 技术干货