概述
自己看着玩玩,如有侵权,请联系我,立刻删除
爬取关键点
1.猫眼票房字体动态加密,需要破解
2.截止今日20210101-20211214,有350天左右,需要ip代理池,Proxypool,代理池搭建链接如下:
通过github搭建代理池
3.需要构造浏览器头段,user-agent
随机生成浏览器
4.猫眼专业版,中间有几天浏览器页面看不到,采用后面额外处理的方法
5.主要采用selenium+pyquer+request+无头Edge的方法
提前告知
缺点:爬取350页需要2小时,主要是留给浏览器加载JS的时间,每页留了10s
破解动态字体加密 font.py
关键点,需要对woff文件由一定的了解
猫眼加密文件为<.woff>文件,解密如下:
- 使用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')
plt.fill