设为首页 - 加入收藏 核心网 (http://www.hxwgxz.com)- 云主机,资讯,互联网,人工智能,云计算,大数据,区块链,VR,站长网!
热搜: 市场 系统 统一 2017
当前位置: 主页 > 教程 > 正文

Python数据可视化:2018年电影分析 -

发布时间:2018-11-22 09:42 所属栏目:[教程] 来源:法纳斯特
导读:双11已经过去,双12即将来临,离2018年的结束也就2个月不到,还记得年初立下的flag吗? 完成了多少?相信很多人和我一样,抱头痛哭... 本次利用猫眼电影,实现对2018年的电影大数据进行分析。 1 网页分析 01 标签 通过点击猫眼电影已经归类好的标签,得到网

双11已经过去,双12即将来临,离2018年的结束也就2个月不到,还记得年初立下的flag吗?

完成了多少?相信很多人和我一样,抱头痛哭...

本次利用猫眼电影,实现对2018年的电影大数据进行分析。

Python数据可视化:2018年电影分析

1 网页分析

01 标签

Python数据可视化:2018年电影分析

通过点击猫眼电影已经归类好的标签,得到网址信息。

02 索引页

Python数据可视化:2018年电影分析

打开开发人员工具,,获取索引页里电影的链接以及评分信息。

索引页一共有30多页,但是有电影评分的只有10页。

本次只对有电影评分的数据进行获取。

03 详情页

Python数据可视化:2018年电影分析

对详情页的信息进行获取。

主要是名称,类型,国家,时长,上映时间,评分,评分人数,累计票房。

2 反爬破解

Python数据可视化:2018年电影分析

通过开发人员工具发现,猫眼针对评分,评分人数,累计票房的数据,施加了文字反爬。

Python数据可视化:2018年电影分析

通过查看网页源码,发现只要刷新页面,三处文字编码就会改变,无法直接匹配信息。

所以需要下载文字文件,对其进行双匹配。

  1. from fontTools.ttLib import TTFont 
  2.  
  3. #font = TTFont('base.woff') 
  4. #font.saveXML('base.xml') 
  5. font = TTFont('maoyan.woff') 
  6. font.saveXML('maoyan.xml') 

将woff格式转换为xml格式,以便在Pycharm中查看详细信息。

利用下面这个网站,打开woff文件。

  • url: http://fontstore.baidu.com/static/editor/index.html

可以得到下面数字部分信息(上下两块)。

在Pycharm中查看xml格式文件(左右两块),你就会发现有对应信息。

Python数据可视化:2018年电影分析

通过上图你就可以将数字6对上号了,其他数字一样的。

  1. def get_numbers(u): 
  2.     """ 
  3.     对猫眼的文字反爬进行破解 
  4.     """ 
  5.     cmp = re.compile(",\n           url\('(//.*.woff)'\) format\('woff'\)") 
  6.     rst = cmp.findall(u) 
  7.     ttf = requests.get("http:" + rst[0], stream=True) 
  8.     with open("maoyan.woff", "wb") as pdf: 
  9.         for chunk in ttf.iter_content(chunk_size=1024): 
  10.             if chunk: 
  11.                 pdf.write(chunk) 
  12.     base_font = TTFont('base.woff') 
  13.     maoyanFont = TTFont('maoyan.woff') 
  14.     maoyan_unicode_list = maoyanFont['cmap'].tables[0].ttFont.getGlyphOrder() 
  15.     maoyan_num_list = [] 
  16.     base_num_list = ['.', '3', '0', '8', '9', '4', '1', '5', '2', '7', '6'] 
  17.     base_unicode_list = ['x', 'uniF561', 'uniE6E1', 'uniF125', 'uniF83F', 'uniE9E2', 'uniEEA6', 'uniEEC2', 'uniED38', 'uniE538', 'uniF8E7'] 
  18.     for i in range(1, 12): 
  19.         maoyan_glyph = maoyanFont['glyf'][maoyan_unicode_list[i]] 
  20.         for j in range(11): 
  21.             base_glyph = base_font['glyf'][base_unicode_list[j]] 
  22.             if maoyan_glyph == base_glyph: 
  23.                 maoyan_num_list.append(base_num_list[j]) 
  24.                 break 
  25.     maoyan_unicode_list[1] = 'uni0078' 
  26.     utf8List = [eval(r"'\u" + uni[3:] + "'").encode("utf-8") for uni in maoyan_unicode_list[1:]] 
  27.     utf8last = [] 
  28.     for i in range(len(utf8List)): 
  29.         utf8List[i] = str(utf8List[i], encoding='utf-8') 
  30.         utf8last.append(utf8List[i]) 
  31.     return (maoyan_num_list ,utf8last) 

3 数据获取

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章