您好,登錄后才能下訂單哦!
今天小編給大家分享一下怎么用Python獲取時(shí)光網(wǎng)電影數(shù)據(jù)的相關(guān)知識點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
requests:網(wǎng)絡(luò)數(shù)據(jù)請求并獲取,安裝方式:pip install requests
threading:多線程處理(數(shù)據(jù)量比較大),Python自帶庫,無需安裝。
json:數(shù)據(jù)處理,Python自帶庫,無需安裝。
pandas:將數(shù)據(jù)導(dǎo)出成excel表格,安裝方式:pip install pandas
1、先通過requests庫,通過時(shí)光網(wǎng)自帶的電影數(shù)據(jù)API接口,獲取到指定的電影數(shù)據(jù)。
2、將獲取到的數(shù)據(jù)經(jīng)過簡單的加工,通過pandas庫存入到excel表格中。
# 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 # 模塊說明: """ 從時(shí)光網(wǎng)上按年代獲取指定年份電影的數(shù)據(jù) """ # 更新日志: """ 1、2021-11-19: a、完成初版 """ # 待修改: """ """ # 請求頭數(shù)據(jù) 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 獲取的每頁數(shù)據(jù)條數(shù),一般建議成默認(rèn)的20就可以了,設(shè)置的太大,每頁包含的數(shù)據(jù)量就大,某一條電影數(shù)據(jù)出錯會導(dǎo)致其它數(shù)據(jù)也被拋棄。 data = [] error = [] def get_data(p_year=1987): # 按照年份獲取當(dāng)年度所有的電影數(shù)據(jù) url = 'http://front-gateway.mtime.com/mtime-search/search/unionSearch3' # 請求的url params = {'year': p_year, 'pageSize': pagesize, 'pageIndex': 1, 'searchType': 0} # 請求的表單數(shù)據(jù) # 獲取當(dāng)年度所有的電影的數(shù)量,繼而計(jì)算要獲取多少頁 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) # 定義變量 來源 = '時(shí)光網(wǎng)' 年代 = p_year ID, 中文名, 英文名, 類型, 形式, 海報(bào)url, 評分, 導(dǎo)演, 主演, 詳情, 可播放, 國家地區(qū), 上映日期, 片長, 票房, 觀看日期 = [''] * 16 for page in range(pages): # todo 一共要獲取多少頁 if page % 10 == 0: # 每10頁輸出一次進(jìn)度 print(f'已完成 {100 * page / pages:.2f}%') pageindex = page + 1 params = {'year': p_year, 'pageSize': pagesize, 'pageIndex': pageindex, 'searchType': 0} # 請求的表單數(shù)據(jù) try: # 獲取指定頁的電影數(shù)據(jù) 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'] 海報(bào)url = movie['img'] 其它譯名 = movie['titleOthersCn'] 評分 = movie['rating'] 導(dǎo)演 = movie['directors'] 主演 = movie['actors'] 詳情 = movie['href'] 可播放 = movie['canPlay'] 國家地區(qū) = movie['locationName'] 上映日期 = movie['realTime'] 片長 = movie['length'] info = [來源, 年代, ID, 中文名, 英文名, 類型, 形式, 海報(bào)url, 其它譯名, 評分, 導(dǎo)演, 主演, 詳情, 可播放, 國家地區(qū), 上映日期, 片長, 票房, 觀看日期] 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', '中文名', '英文名', '類型', '形式', '海報(bào)url', '其它譯名', '評分', '導(dǎo)演', '主演', '詳情', '可播放', '國家地區(qū)', '上映日期', '片長', '票房', '觀看日期']) 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'運(yùn)行時(shí)長:{runtime:.3f}秒。')
輸出結(jié)果:
已完成 0.00%
已完成 11.63%
已完成 23.26%
已完成 34.88%
已完成 46.51%
已完成 58.14%
已完成 69.77%
已完成 81.40%
已完成 93.02%
運(yùn)行時(shí)長:27.906秒。
雖然示例中獲取的是2020年的數(shù)據(jù),但是由于代碼中采用的是多線程,所以如果是獲取一段時(shí)間的數(shù)據(jù)時(shí)耗費(fèi)的時(shí)間也和這個(gè)差不多。
最后保存到excel中的數(shù)據(jù)如下:
以上就是“怎么用Python獲取時(shí)光網(wǎng)電影數(shù)據(jù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。