最近一直在学习爬虫,刚好到了反爬这一块,听朋友说大众点评的反爬挺厉害,分析了一下发现还是老熟人,字体反爬,没错,与猫眼电影一样也是字体反爬,感兴趣的朋友可以点
猫眼电影
了解详情,不过和猫眼的字体反爬不同,大众点评是通过css文件来进行加密,下面就让我们一起来分析分析吧
爬取网址
本次爬取网址:
华联影城(平谷店)
字体加密原理分析
这是网页显示的评论
点击检查打开开发者工具,可以看到一条评论有个别字是使用标签代替的,然后通过类选择器进行css加密
既然知道了css加密,那么我们首先要找的就是CSS文件了,右击点击查看源代码,这就是我们要找的css加密文件了
打开这个文件,可以看到密密麻麻的一堆标签,这就是每个类对应的字体坐标
找到坐标之后,我们还需要找到他加密的字体文件,字体文件的链接也藏在这个文件中,
Ctrl+F
搜索
.svg
,一共有3个文件,都是字体加密的文件
打开之后的样子
查看源代码
这里我们只要注意y轴就行了,x轴是直接通过除以字体大小得出来,不过y会有一些细微的差别,我们只需要取相近的值,就能判断是哪个字了
代码
分析完后,我们就开始爬取吧,因为爬取的数据也不是很多,所以我们直接使用
requests
模块进行爬取,简单的代码我就不上了,直接上干货
获取3个字体加密文件
取出.css文件,在依次取出里面的3个.svg文件,最后组成映射字典保存起来
def get_encryption_font(self, html):
"""获取加密字体"""
font_href = "http:" + html.xpath("//link[@rel='stylesheet'][2]/@href")[0]
# 发送请求下载字体
encryption_font = requests.get(font_href, headers=self.headers).text
encryption_font_list = re.findall(r"(\w+)\{background:-(\d+).0px -(\d+).0px;\}", encryption_font)
self.encryption_font_map_dict =