# 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}秒。')
到此这篇关于python获取时光网电影数据的文章就介绍到这了,更多相关python时光网电影内容请搜索<编程笔记>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<编程笔记>!