加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

【Python爬虫+数据分析】2018年电影,你看了几部?

发布时间:2018-12-20 03:00:14 所属栏目:教程 来源:法纳斯特
导读:12月已开始了,离2018年的结束也就半个多月的时间了,还记得年初立下的flag吗? 完成了多少?相信很多人和我一样,抱头痛哭... 本次利用猫眼电影,实现对2018年的电影大数据进行分析。 一、网页分析 01 标签 通过点击猫眼电影已经归类好的标签,得到网址信息
副标题[/!--empirenews.page--]

12月已开始了,离2018年的结束也就半个多月的时间了,还记得年初立下的flag吗?

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

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

【Python爬虫&数据分析】2018年电影,你看了几部?

一、网页分析

01 标签

【Python爬虫&数据分析】2018年电影,你看了几部?

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

02 索引页

【Python爬虫&数据分析】2018年电影,你看了几部?

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

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

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

03 详情页

【Python爬虫&数据分析】2018年电影,你看了几部?

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

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

二、反爬破解

【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) 

三、数据获取

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读