广告位联系
返回顶部
分享到

Python获取时光网电影数据的完整代码

python 来源:互联网 作者:佚名 发布时间:2022-09-05 23:39:42 人浏览
摘要

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

一、前言

有时候觉得电影真是人类有史以来最伟大的发明,我喜欢看电影,看电影可以让我们增长见闻,学习知识。从某种角度上而言,电影凭借自身独有的魅力大大延长了人类的”寿命”。
一部电影如同一本故事书,我可以沉迷到其中,来的一个新的世界,跟着电影主角去经历去感悟。而好的电影是需要慢慢品尝的,不仅提供了各种视觉刺激和情感体验,更能带来思考点,也让我可以懂得在现实生活中穷尽一生也无法明白的道理。电影比书本更直接、更有趣、更精彩。
好的电影可以在潜移默化中塑造我们的三观,在电影中我们可以获得平静、满足和温和,学会坚强、勇气和努力。电影延展了无聊单调、枯燥又稀松平常的生活,让我可以在对现实生活厌倦或失望时至少有一个地方可以逃离。
正因为电影有诸多好处,并且比书本和说教能更好的塑造三观,因此,家长们可以陪同小孩看电影,鼓励孩子从电影中学会坚强和勇敢等优良品质。
既然要看看电影,就要去看优秀的作品,时光网是一个电影各方面素材都比较全面的网站,本次的项目就是要从该网站上获取到指定年份的所有电影数据,并导出成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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

# Encoding: utf-8

# Author: furongbing

# Date: 2021-11-19 20:54

# Project name: FrbPythonFiles

# IDE: PyCharm

# File name: Mtime

import requests

import pandas as pd

from threading import Thread

import time

import json

  

# 模块说明:

"""

从时光网上按年代获取指定年份电影的数据

"""

# 更新日志:

"""

1、2021-11-19:

    a、完成初版

"""

# 待修改:

"""

"""

# 请求头数据

headers = {"Accept": "application/json, text/plain, */*",

           "Accept-Encoding": "gzip, deflate",

           'Accept-Language': 'zh-CN,zh;q=0.9',

           'Connection': 'keep-alive',

           'Content-Type': 'application/x-www-form-urlencoded',

           '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',

           'Host': 'front-gateway.mtime.com',

           'Origin': 'http://film.mtime.com',

           'Referer': 'http://film.mtime.com/',

           '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'

           }

pagesize = 20  # todo 获取的每页数据条数,一般建议成默认的20就可以了,设置的太大,每页包含的数据量就大,某一条电影数据出错会导致其它数据也被抛弃。

data = []

error = []

  

  

def get_data(p_year=1987):  # 按照年份获取当年度所有的电影数据

    url = 'http://front-gateway.mtime.com/mtime-search/search/unionSearch2'  # 请求的url

    params = {'year': p_year, 'pageSize': pagesize, 'pageIndex': 1, 'searchType': 0}  # 请求的表单数据

    # 获取当年度所有的电影的数量,继而计算要获取多少页

    try:

        r = requests.get(url=url, params=params, headers=headers, timeout=10)

        r.encoding = r.apparent_encoding

        all_data = json.loads(r.text)

        moviesCount = all_data['data']['moviesCount']

        pages = round(moviesCount / pagesize)

    except Exception:

        moviesCount = 1000

        pages = round(moviesCount / pagesize)

  

    # 定义变量

    来源 = '时光网'

    年代 = p_year

    ID, 中文名, 英文名, 类型, 形式, 海报url, 评分, 导演, 主演, 详情, 可播放, 国家地区, 上映日期, 片长, 票房, 观看日期 = [''] * 16

  

    for page in range(pages):  # todo 一共要获取多少页

        if page % 10 == 0:  # 每10页输出一次进度

            print(f'已完成 {100 * page / pages:.2f}%')

        pageindex = page + 1

        params = {'year': p_year, 'pageSize': pagesize, 'pageIndex': pageindex, 'searchType': 0}  # 请求的表单数据

        try:  # 获取指定页的电影数据

            r = requests.get(url=url, params=params, headers=headers, timeout=10)

            r.encoding = r.apparent_encoding

            all_data = json.loads(r.text)

            movies = all_data['data']['movies']

            # 获取电影具体信息

            for movie in movies:

                ID = movie['movieId']

                中文名 = movie['name']

                英文名 = movie['nameEn']

                类型 = movie['movieType']

                形式 = movie['movieContentType']

                海报url = movie['img']

                其它译名 = movie['titleOthersCn']

                评分 = movie['rating']

                导演 = movie['directors']

                主演 = movie['actors']

                详情 = movie['href']

                可播放 = movie['canPlay']

                国家地区 = movie['locationName']

                上映日期 = movie['realTime']

                片长 = movie['length']

                info = [来源, 年代, ID, 中文名, 英文名, 类型, 形式, 海报url, 其它译名, 评分, 导演, 主演, 详情, 可播放, 国家地区, 上映日期, 片长, 票房, 观看日期]

                data.append(info)

        except Exception as err:

            er_year, er_pagesize, er_pageindex, er_msg = p_year, pagesize, pageindex, err

            error.append([er_year, er_pagesize, er_pageindex, er_msg])

            print(f"出错啦,出错年份:{p_year},pagesize:{pagesize},page:{pageindex},出错原因:{er_msg}")

            continue

  

  

if __name__ == '__main__':

    begin = time.perf_counter()

    threads = []

    for year in range(2020, 2021):  # todo 此处可以自定义要获取的年份

        t = Thread(target=get_data, args=(year,))

        threads.append(t)

        t.start()

    for t in threads:

        t.join()

  

    with open('error.txt', 'w', encoding='utf-8') as f:

        f.write(str(error))

  

    data.insert(0, ['来源', '年代', 'ID', '中文名', '英文名', '类型', '形式', '海报url', '其它译名', '评分', '导演', '主演', '详情', '可播放', '国家地区', '上映日期', '片长', '票房', '观看日期'])

    df = pd.DataFrame(data)

    df.to_excel(excel_writer=r'film.xlsx', sheet_name='sheet1', index=None, header=False)  # todo film.xlsx为最后保存的文件名

  

    end = time.perf_counter()

    runtime = end - begin

    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中的数据如下:

从自动化办公到智能化办公


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://www.cnblogs.com/sibide/archive/2022/09/03/16652309.html
相关文章
  • Python Django教程之实现新闻应用程序

    Python Django教程之实现新闻应用程序
    Django是一个用Python编写的高级框架,它允许我们创建服务器端Web应用程序。在本文中,我们将了解如何使用Django创建新闻应用程序。 我们将
  • 书写Python代码的一种更优雅方式(推荐!)

    书写Python代码的一种更优雅方式(推荐!)
    一些比较熟悉pandas的读者朋友应该经常会使用query()、eval()、pipe()、assign()等pandas的常用方法,书写可读性很高的「链式」数据分析处理代码
  • Python灰度变换中伽马变换分析实现

    Python灰度变换中伽马变换分析实现
    1. 介绍 伽马变换主要目的是对比度拉伸,将图像灰度较低的部分进行修正 伽马变换针对的是对单个像素点的变换,也就是点对点的映射 形
  • 使用OpenCV实现迷宫解密的全过程

    使用OpenCV实现迷宫解密的全过程
    一、你能自己走出迷宫吗? 如下图所示,可以看到是一张较为复杂的迷宫图,相信也有人尝试过自己一点一点的找出口,但我们肉眼来解谜
  • Python中的数据精度问题的介绍

    Python中的数据精度问题的介绍
    一、python运算时精度问题 1.运行时精度问题 在Python中(其他语言中也存在这个问题,这是计算机采用二进制导致的),有时候由于二进制和
  • Python随机值生成的常用方法

    Python随机值生成的常用方法
    一、随机整数 1.包含上下限:[a, b] 1 2 3 4 import random #1、随机整数:包含上下限:[a, b] for i in range(10): print(random.randint(0,5),end= | ) 查看运行结
  • Python字典高级用法深入分析讲解
    一、 collections 中 defaultdict 的使用 1.字典的键映射多个值 将下面的列表转成字典 l = [(a,2),(b,3),(a,1),(b,4),(a,3),(a,1),(b,3)] 一个字典就是一个键对
  • Python浅析多态与鸭子类型使用实例
    什么多态:同一事物有多种形态 为何要有多态=》多态会带来什么样的特性,多态性 多态性指的是可以在不考虑对象具体类型的情况下而直
  • Python字典高级用法深入分析介绍
    一、 collections 中 defaultdict 的使用 1.字典的键映射多个值 将下面的列表转成字典 l = [(a,2),(b,3),(a,1),(b,4),(a,3),(a,1),(b,3)] 一个字典就是一个键对
  • Python淘宝或京东等秒杀抢购脚本实现(秒杀脚本

    Python淘宝或京东等秒杀抢购脚本实现(秒杀脚本
    我们的目标是秒杀淘宝或京东等的订单,这里面有几个关键点,首先需要登录淘宝或京东,其次你需要准备好订单,最后要在指定时间快速
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计