概述
自己看着玩玩,如有侵权,请联系我,立刻删除 ![在这里插入图片描述](https://img-blog.csdnimg.cn/cc1036dca0324a11b8d23bd0e92a1ce0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6ZOB5oao5oaoMDMwNA==,size_20,color_FFFFFF,t_70,g_se,x_16)
爬取关键点 1.猫眼票房字体动态加密,需要破解 2.截止今日20210101-20211214,有350天左右,需要ip代理池,Proxypool,代理池搭建链接如下: 通过github搭建代理池 3.需要构造浏览器头段,user-agent 随机生成浏览器 4.猫眼专业版,中间有几天浏览器页面看不到,采用后面额外处理的方法 5.主要采用selenium+pyquer+request+无头Edge的方法
提前告知 缺点:爬取350页需要2小时,主要是留给浏览器加载JS的时间,每页留了10s
破解动态字体加密 font.py
关键点,需要对woff文件由一定的了解 猫眼加密文件为文件,解密如下: ![](https://img-blog.csdnimg.cn/f8371871a9b64bf0926be9b4dc739d77.png)
使用requests,下载woff文件,
采用fontTools,获取字体编码
采用matplotlib,绘制编码出来的坐标图
采用ddddocr(一种轻便OCR),识别图像数据
最终:编码与数字对应起来,得到编码映射字典
#font.py
from fontTools.ttLib import TTFont
import matplotlib.pyplot as plt
import numpy as np
import ddddocr
from os import remove
def get_fontdict(woff_path, woffname):
#打开woff文件,获取编码列表,字体坐标列表
base_font = TTFont(r'{}\{}'.format(woff_path, woffname))
#获取字体编码
#['uniEA9E', 'uniE528', 'uniE4A0', 'uniF0D8', 'uniF19A', 'uniEC3C', 'uniF7BE', 'uniF702', 'uniEE91', 'uniEC82']
font_name = base_font.getGlyphOrder()[2:]
#获取每个字体编码对应的坐标
zb = [base_font['glyf'][i].coordinates for i in font_name]
#OCR
ocr = ddddocr.DdddOcr()
#识别出的数字列表
font_id = []
#将每个坐标绘制,绘制两个出来,并使用ocr进行识别数字
fig, ax = plt.subplots()
for index, one in enumerate(zb):
x, y = [i[0] for i in one], [i[1] for i in one]
#plt.scatte(x, y, c='r')
plt.plot(x, y)
x_n = [i + np.max(x) + 100 for i in x]
#plt.scatter(x_n, y, c='r')
plt.plot(x_n, y)
plt.fill(x, y, 'black&
|