网页抓取 加密html(Python学习资料分析XX点评数据的对应关系及乱码与数字)
优采云 发布时间: 2022-02-04 07:07网页抓取 加密html(Python学习资料分析XX点评数据的对应关系及乱码与数字)
PS:如需Python学习资料,可点击下方链接自行获取
大家爬取分析XX评论数据,最常见的无外乎两种:
1、分析所有店铺的各种评分和推荐菜品2、获取店铺评论数据
而大众点评最大的问题就是字体加密,仅此而已
显然,大众点评宁愿误杀一万也不愿放过一个,干脆用自己定义的字体。但是,由于字体是自定义的,所以网页必须需要加载字体文件。
谷歌浏览器,右键查看,进入网络刷新页面,点击字体。
让我们下载这个加载的字体:8f8cfde4.woff
右键复制类似地址
粘贴到新页面下载
将下载好的字体导入FontEditor打开(百度的在线字体编辑器)
导入后:
然后我们结合网页的源码,得到对应的乱码和数字的对应关系:
我们可以发现网页中的乱码与FontEditor中乱码的后四位是一样的。例如图片中某店铺的评论数为2481条,在网页源码中用[1]表示。这是 FontEditor 的字体。编辑器中对应的是[unie801, unieb78, uniefe4]。
所以我们要做的是:
1、下载网站字体包2、将字体包导入FontEditor,观察乱码与数字的关系 乱码组成字典
def get_font():
font = TTFont('8f8cfde4.woff')
font_names = font.getGlyphOrder()
# 这些文字就是在FontEditor软件打开字体文件后看到的文字名字
texts = ['','','1','2','3','4','5','6','7','8','9','0']
font_name = {}
# 将字体名字和它们所对应的乱码构成一个字典
for index,value in enumerate(texts):
a = font_names[index].replace('uni', '&#x').lower() + ";"
font_name[a] = value
return font_name
运行
是的,这与刚刚观察到的结果一致。
然后我们获取网页的源代码,根据get_font()形成的字典进行替换。
import requests
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'}
cookies = {'cookie':'你的cookies'}
url = 'http://www.dianping.com/beijing/ch10/g110p1'
html = requests.get(url, headers=headers,cookies = cookies).text
#requests获得html
num = get_font()
#获得加密映射关系
for key in num:
if key in html:
html = html.replace(key, str(num[key]))
#替换html中加密文字
再看一下结果:
这样,大众点评的字体加密就被破解了。
其他人可以使用自己喜欢的解析方法来解析 html。