python爬虫实践-02-大众点评评论爬取-破解CSS字体加密

本文以页面https://www.dianping.com/shop/jh631305VtnDuXpl/review_all为例,对大众点评的CSS+SVG字体加密的反爬机制进行破解,解析得到评论信息。

warning:大众点评反爬策略更新的很快,即使机制没变,也会在其它地方设置障碍,让你之前的爬虫完全没法用。比如我在写这篇博客的前几天写好的爬虫,解析出了映射表,结果写博客的时候就用不了。而且它不仅更换了相应的文件,还把文件的格式给改了,这样对文件的解析也得重新来,比如这次,它就把svg的文件格式给改了,解析的难度大了很多,我对这方面不太了解,只能猜+验证。

关键:破解字体加密CSS+SVG

网页:

image-20210613154609465

网页源代码:

image-20210613155024271

二者对比可知:

  1. 完整的评论由HTML中的两部分组成
  2. 评论中大量的字被加密了,比如“吃”就被加密为<svgmtsi class'qxszj'></svgmtsi>

要解决加密问题,我们再打开开发者工具进行查询,选中加密字1,查看style。

image-20210613161003382

从上图可以知道,<svgmtsi class="qxszj"></svgmtsi>background-image给替换了,并且是将back-ground-image上坐标为-42.0px,-1420.0px处的元素替换的。2号该URL对应着一个分布着一行一行汉字的SVG文件。而右上角的3号CSS文件则是用于根据 class的值qxszj,来从background-image中根据坐标来选取某个汉字的,即其功能是映射。

由于其映射规则保存在CSS文件中,**因此我们需要将该CSS文件和SVG文件都下载下来进行分析。**根据CSS定位背景图片的规则:

x y用百分比或者px表示的时候,其值可以为负数。我们应用坐标规则就很容易理解负数表示的意义,x为负数时候表示图片左顶点在容器左顶点的左侧,y为负数时表示图片的左顶点在容器的左定点的上方

我们首先针对一个字进行分析,即<svgmtsi class="qxszj"></svgmtsi>映射为“吃”。

读取SVG文件【需要注意的是SVG文件不仅内容会变,格式也会变,写博客的时候,原来的SVG格式就变了】

image-20210613163247972

其中“吃”字所行为:<textPath xlink:href="#36" textLength="322">纸盒秘吃净培杀侄掠留抚源甩宣脑邪蓬非勺吸洞极呼</textPath>即处于第36行,第4个字。

读取CSS文件,找到字段.qxszj{background:-42.0px -1420.0px;}即“吃”字加密后的<svgmtsi class="qxszj"></svgmtsi>被SVG中坐标-42.0px -1420.0px的文字替代。为了找到坐标和汉字所处行列的规则,我们查看SVG的头部信息:

image-20210613165631916

该字段指明:font-size:14px,而“吃”字:x=-42.0px,第4个字,下标为3,显然:下标为abs(x)/14

而y坐标与行的关系,需要知道行高,但SVG头部并没有直接给出,猜测path id='1' d='M0 33 H600'表示的是id为1的行,其行所在的y坐标为33,那么的话,“吃”所在的href=36,而此处<path id="35" d="M0 1399 H600"/><path id="36" d="M0 1443 H600"/>'可以得出规律,要找到第一个d大于y的path id,从而定位到行。

由于缺乏相关知识,上面只是猜测得到的规律,不一定正确,以后有需要再进行研究。

基于上述规律,可以根据CSS文件和SVG文件构建映射表:

import requests
from bs4 import BeautifulSoup
import re
with open
  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值