针对大众点评网上商铺评论字体替换反爬的反反爬
字体替换的反爬,在之前网站出现过,如淘宝、猫眼等。但是主要针对于数字字体替换,由于数字就十个,完全可以手动分析字体文件,找出编码与数字的关系。但是,大众点评评论中的字体文件中的文字共603个,手动写对应关系是不可能的事。
下面将介绍一种可行的方案:
这是进入商铺页面 http://www.dianping.com/shop/130096343
我们可以看到页面源代码中有许多的svgmtsi
标签,但是文字都无法正常显示,点击标签可以看到右边的css属性
.review {
font-family: 'PingFangSC-Regular-review';
}
我们看到svgmtsi
这样的标签都是使用的自定义字体,字体定义一般都是在css文件中定义,我们需要找到css文件。
字体定义都是以@font-face
形式定义,在上图红框中就是PingFangSC-Regular-review
字体的定义。我们可以看到有3个url链接,chrome浏览器支持的是.woff
字体
@font-face {
font-family: "PingFangSC-Regular-review";
src: url("//s3plus.meituan.net/v1/mss_73a511b8f91f43d0bdae92584ea6330b/font/0ddcf35f.eot");
src: url("//s3plus.meituan.net/v1/mss_73a511b8f91f43d0bdae92584ea6330b/font/0ddcf35f.eot?#iefix") format("embedded-opentype"),url("//s3plus.meituan.net/v1/mss_73a511b8f91f43d0bdae92584ea6330b/font/0ddcf35f.woff");
}
根据这个链接就可以下载字体文件。在代码中链接前面记得加上http:
。
下面就是以上内容的代码:(函数返回的是字体路径,在后面解析字体会用到这个路径)
def downloadFontFile(): #向解析页面获得css的href,发送请求,对css正则匹配出字体的url,下载字体文件
cssUrl = "http://s3plus.meituan.net/v1/mss_0a06a471f9514fc79c981b5466f56b91/svgtextcss/92b88886eb6a3d468078043ccd49b99e.css"
css_response = seedRequest(cssUrl)
fontUrl = re.findall('@font-face{font-family: "PingFangSC-Regular-review";src.*?format.*?url\("(.*?)"\);}',css_response.text,re.S)[0]
print(fontUrl)
font_response = seedRequest("http:"+fontUrl)
fontPath = os.path.join(os.getcwd(),os.path.basename(fontUrl))
with open(fontPath,"wb") as fp:
fp.write(font_response.content)
return fontPath
在下载完字体后,可