Python获取时光网电影数据

一、前言

有时候觉得电影真是人类有史以来最伟大的发明,我喜欢看电影,看电影可以让我们增长见闻,学习知识。从某种角度上而言,电影凭借自身独有的魅力大大延长了人类的”寿命”。

一部电影如同一本故事书,我可以沉迷到其中,来的一个新的世界,跟着电影主角去经历去感悟。而好的电影是需要慢慢品尝的,不仅提供了各种视觉刺激和情感体验,更能带来思考点,也让我可以懂得在现实生活中穷尽一生也无法明白的道理。电影比书本更直接、更有趣、更精彩。

好的电影可以在潜移默化中塑造我们的三观,在电影中我们可以获得平静、满足和温和,学会坚强、勇气和努力。电影延展了无聊单调、枯燥又稀松平常的生活,让我可以在对现实生活厌倦或失望时至少有一个地方可以逃离。

正因为电影有诸多好处,并且比书本和说教能更好的塑造三观,因此,家长们可以陪同小孩看电影,鼓励孩子从电影中学会坚强和勇敢等优良品质。

既然要看看电影,就要去看优秀的作品,时光网是一个电影各方面素材都比较全面的网站,本次的项目就是要从该网站上获取到指定年份的所有电影数据,并导出成excel表格以供参考。

注意:请勿使用该技术获取网络上敏感、隐私、非公开等数据。

电影推荐(爱情类):

假如爱有天意:缘,妙不可言,或许一切早已注定。

灵魂摆渡·黄泉:为情甘愿赴死,为爱执守千年。

你的名字:世上所有的相遇都是久别重逢。

电影推荐(亲子类):

机器人总动员:孩子看到的是友情,大人看到的是爱情。很有爱的一部动画片。

寻梦环游记:死亡并不是终点,被人忘却才是真正的死亡

电影推荐(悬疑类):

小岛惊魂

异次元骇客

恐怖游轮

二、准备

2.1 安装库

requests:网络数据请求并获取,安装方式:pip install requests

threading:多线程处理(数据量比较大),Python自带库,无需安装。

json:数据处理,Python自带库,无需安装。

pandas:将数据导出成excel表格,安装方式:pip install pandas

2.2 原理介绍

1、先通过requests库,通过时光网自带的电影数据API接口,获取到指定的电影数据。

2、将获取到的数据经过简单的加工,通过pandas库存入到excel表格中。

三、实例

3.1 完整代码

  1. # Encoding: utf-8
  2. # Author: furongbing
  3. # Date: 2021-11-19 20:54
  4. # Project name: FrbPythonFiles
  5. # IDE: PyCharm
  6. # File name: Mtime
  7. import requests
  8. import pandas as pd
  9. from threading import Thread
  10. import time
  11. import json
  12. # 模块说明:
  13. """
  14. 从时光网上按年代获取指定年份电影的数据
  15. """
  16. # 更新日志:
  17. """
  18. 1、2021-11-19:
  19. a、完成初版
  20. """
  21. # 待修改:
  22. """
  23. """
  24. # 请求头数据
  25. headers = {"Accept": "application/json, text/plain, */*",
  26. "Accept-Encoding": "gzip, deflate",
  27. 'Accept-Language': 'zh-CN,zh;q=0.9',
  28. 'Connection': 'keep-alive',
  29. 'Content-Type': 'application/x-www-form-urlencoded',
  30. 'Cookie': '_tt_=FB8A3FAD4704D42543B7EC121C2565AA; __utma=196937584.1082595229.1637326918.1637326918.1637326918.1; __utmz=196937584.1637326918.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); Hm_lvt_07aa95427da600fc217b1133c1e84e5b=1637241042,1637326637,1637374129; Hm_lpvt_07aa95427da600fc217b1133c1e84e5b=1637374170',
  31. 'Host': 'front-gateway.mtime.com',
  32. 'Origin': 'http://film.mtime.com',
  33. 'Referer': 'http://film.mtime.com/',
  34. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
  35. }
  36. pagesize = 20 # todo 获取的每页数据条数,一般建议成默认的20就可以了,设置的太大,每页包含的数据量就大,某一条电影数据出错会导致其它数据也被抛弃。
  37. data = []
  38. error = []
  39. def get_data(p_year=1987): # 按照年份获取当年度所有的电影数据
  40. url = 'http://front-gateway.mtime.com/mtime-search/search/unionSearch2' # 请求的url
  41. params = {'year': p_year, 'pageSize': pagesize, 'pageIndex': 1, 'searchType': 0} # 请求的表单数据
  42. # 获取当年度所有的电影的数量,继而计算要获取多少页
  43. try:
  44. r = requests.get(url=url, params=params, headers=headers, timeout=10)
  45. r.encoding = r.apparent_encoding
  46. all_data = json.loads(r.text)
  47. moviesCount = all_data['data']['moviesCount']
  48. pages = round(moviesCount / pagesize)
  49. except Exception:
  50. moviesCount = 1000
  51. pages = round(moviesCount / pagesize)
  52. # 定义变量
  53. 来源 = '时光网'
  54. 年代 = p_year
  55. ID, 中文名, 英文名, 类型, 形式, 海报url, 评分, 导演, 主演, 详情, 可播放, 国家地区, 上映日期, 片长, 票房, 观看日期 = [''] * 16
  56. for page in range(pages): # todo 一共要获取多少页
  57. if page % 10 == 0: # 每10页输出一次进度
  58. print(f'已完成 {100 * page / pages:.2f}%')
  59. pageindex = page + 1
  60. params = {'year': p_year, 'pageSize': pagesize, 'pageIndex': pageindex, 'searchType': 0} # 请求的表单数据
  61. try: # 获取指定页的电影数据
  62. r = requests.get(url=url, params=params, headers=headers, timeout=10)
  63. r.encoding = r.apparent_encoding
  64. all_data = json.loads(r.text)
  65. movies = all_data['data']['movies']
  66. # 获取电影具体信息
  67. for movie in movies:
  68. ID = movie['movieId']
  69. 中文名 = movie['name']
  70. 英文名 = movie['nameEn']
  71. 类型 = movie['movieType']
  72. 形式 = movie['movieContentType']
  73. 海报url = movie['img']
  74. 其它译名 = movie['titleOthersCn']
  75. 评分 = movie['rating']
  76. 导演 = movie['directors']
  77. 主演 = movie['actors']
  78. 详情 = movie['href']
  79. 可播放 = movie['canPlay']
  80. 国家地区 = movie['locationName']
  81. 上映日期 = movie['realTime']
  82. 片长 = movie['length']
  83. info = [来源, 年代, ID, 中文名, 英文名, 类型, 形式, 海报url, 其它译名, 评分, 导演, 主演, 详情, 可播放, 国家地区, 上映日期, 片长, 票房, 观看日期]
  84. data.append(info)
  85. except Exception as err:
  86. er_year, er_pagesize, er_pageindex, er_msg = p_year, pagesize, pageindex, err
  87. error.append([er_year, er_pagesize, er_pageindex, er_msg])
  88. print(f"出错啦,出错年份:{p_year},pagesize:{pagesize},page:{pageindex},出错原因:{er_msg}")
  89. continue
  90. if __name__ == '__main__':
  91. begin = time.perf_counter()
  92. threads = []
  93. for year in range(2020, 2021): # todo 此处可以自定义要获取的年份
  94. t = Thread(target=get_data, args=(year,))
  95. threads.append(t)
  96. t.start()
  97. for t in threads:
  98. t.join()
  99. with open('error.txt', 'w', encoding='utf-8') as f:
  100. f.write(str(error))
  101. data.insert(0, ['来源', '年代', 'ID', '中文名', '英文名', '类型', '形式', '海报url', '其它译名', '评分', '导演', '主演', '详情', '可播放', '国家地区', '上映日期', '片长', '票房', '观看日期'])
  102. df = pd.DataFrame(data)
  103. df.to_excel(excel_writer=r'film.xlsx', sheet_name='sheet1', index=None, header=False) # todo film.xlsx为最后保存的文件名
  104. end = time.perf_counter()
  105. runtime = end - begin
  106. print(f'运行时长:{runtime:.3f}秒。')

输出结果:

已完成 0.00%

已完成 11.63%

已完成 23.26%

已完成 34.88%

已完成 46.51%

已完成 58.14%

已完成 69.77%

已完成 81.40%

已完成 93.02%

运行时长:27.906秒。

虽然示例中获取的是2020年的数据,但是由于代码中采用的是多线程,所以如果是获取一段时间的数据时耗费的时间也和这个差不多。

最后保存到excel中的数据如下:

Python获取时光网电影数据的更多相关文章

  1. 爬虫实战【11】Python获取豆瓣热门电影信息

    之前我们从猫眼获取过电影信息,而且利用分析ajax技术,获取过今日头条的街拍图片. 今天我们在豆瓣上获取一些热门电影的信息. 页面分析 首先,我们先来看一下豆瓣里面选电影的页面,我们默认选择热门电影, ...

  2. 关于Python获取图片文件二进制数据的问题(获取为空)

    在搭建fastdfs文件系统的时候遇到了点问题,在测试上传文件数据流的时候,需要Python来获取本地文件的二进制流 from fdfs_client.client import Fdfs_clien ...

  3. python获取list列表随机数据

    第一种方法(推荐)适用于随机取一个值, 返回一个值import randomlist1 = ['佛山', '南宁', '北海', '杭州', '南昌', '厦门', '温州']a = random.c ...

  4. [Python] 抓取时光网的电影列表并生成网页

    抓取时光网的电影列表并生成网页 源码 https://github.com/YouXianMing/BeautifulSoup4-WebCralwer 分析 利用BeautifulSoup进行分析网页 ...

  5. 使用BeautifulSoup和正则表达式爬取时光网不同地区top100电影并使用Matplotlib对比

    还有一年多就要毕业了,不准备考研的我要着手准备找实习及工作了,所以一直没有更新. 因为Python是自学不久,发现很久不用的话以前学过的很多方法就忘了,今天打算使用简单的BeautifulSoup和一 ...

  6. Python开发爬虫之静态网页抓取篇:爬取“豆瓣电影 Top 250”电影数据

    所谓静态页面是指纯粹的HTML格式的页面,这样的页面在浏览器中展示的内容都在HTML源码中. 目标:爬取豆瓣电影TOP250的所有电影名称,网址为:https://movie.douban.com/t ...

  7. 【python数据分析实战】电影票房数据分析(二)数据可视化

    目录 图1 每年的月票房走势图 图2 年票房总值.上映影片总数及观影人次 图3 单片总票房及日均票房 图4 单片票房及上映月份关系图 在上一部分<[python数据分析实战]电影票房数据分析(一 ...

  8. HTTP协议与使用Python获取数据并写入MySQL

    一.Http协议 二.Https协议 三.使用Python获取数据 (1)urlib (2)GET请求 (3)POST请求 四.爬取豆瓣电影实战 1.思路 (1)在浏览器中输入https://movi ...

  9. .net dataGridView当鼠标经过时当前行背景色变色;然后【给GridView增加单击行事件,并获取单击行的数据填充到页面中的控件中】

    1.首先在前台dataGridview属性中增加onRowDataBound属性事件 2.然后在后台Observing_RowDataBound事件中增加代码 protected void Obser ...

随机推荐

  1. 批处理(bat、cmd)命令总结

    2021-07-21 初稿 注释与回显 rem 回显 @取消单行回显 rem 注释有三种方式 :: %content% rem rem @取消单行回显,echo off取消后面的回显 @echo of ...

  2. 关于webstorm更换主题

    现在我们前端使用编辑器,只要用习惯就好,不过这里推荐使用webstorm,因为被称为,'js神器'的称号,不是白说的.接下来我们来看下怎么引入主题. 下面有一个网站,这个网站的名字叫 http://w ...

  3. RPA SAP财务内部对账机器人

    [简介] 本机器人用于使用SAP软件的集团公司间往来对账前台登录SAP账户和密码,需退出PC微信,输入法切换为英文半角状态. [详细流程] 1.清空Excel-VBA管理工具原始数据 2.输入对账时间 ...

  4. Unity3D学习笔记6——GPU实例化(1)

    目录 1. 概述 2. 详论 3. 参考 1. 概述 在之前的文章中说到,一种材质对应一次绘制调用的指令.即使是这种情况,两个三维物体使用同一种材质,但它们使用的材质参数不一样,那么最终仍然会造成两次 ...

  5. Tapdata x 轻流,为用户打造实时接入轻流的数据高速通道

      在全行业加速布局数字化的当口,如何善用工具,也是为转型升级添薪助力的关键一步.   那么当轻量的异构数据实时同步工具,遇上轻量的数字化管理工具,将会收获什么样的新体验?此番 Tapdata 与轻流 ...

  6. JAVA学习的第一周

    这是发表的第一篇博客,关于Java编程的学习体会如下 1.了解Java的产生与发展时机:1995左右出现Java语言,然后Java的最主要的特点是"跨平台".对于跨平台我不太理解, ...

  7. 解决报错Error response from daemon: Get https://10.0.0.110/v2/: dial tcp 10.0.0.110:443: connect: connection refused

    修改 #https不需要验证,否则要加上以下配置# 意思就是非安全仓库,加上重启就OK了! vim /lib/systemd/system/docker.service --insecure-regi ...

  8. 安卓系统使用USB转串口

    概述 安卓系统支持多种 USB 外围设备,提供两种模式来支持实现 USB 外设接入系统:USB 配件模式和 USB 主机模式. 在 USB 配件模式下,接入的 USB 设备充当 USB 主机,并为 U ...

  9. Netty源码解读(三)-NioEventLoop

    先看看EventLoop类图 我们在Netty第二篇文章中的代码中,看到有多次用到eventLoop.execute()方法,这个方法就是EventLoop开启线程执行任务的关键,跟踪进去看看 // ...

  10. 第十九天python3 json和messagepack

    json的数据类型官网:https://www.json.org/ 值: 双引号内的字符串,数值,true和false,null,对象,数组:字符串: 双引号内的任意字符的组合,可以有专一字符:数值: ...