''' 作業 爬去dytt 2019新片精品 -> 把所有電影的名字, 主演, 下載鏈接. 放在一個json文件里 { {"main_people": ["井柏然", "張一山"], "name": xxxx, "url":}, {}, {} } 要求: 代碼合理性 ''' from urllib.request import urlopen import re import json def get_dytt_url(homepage): index_content = urlopen(homepage).read().decode("gbk") # 獲取電影天堂主頁源代碼 index_obj = re.compile(r"最新電影下載</a>]<a href='(?P<film_url>.*?)'>", re.S) # 2019新片精品鏈接 return index_obj.finditer(index_content) # 創建一個迭代器 def get_dytt_info(film_url_ite): for k, fil_url in enumerate(film_url_ite, 1): # 遍歷電影每個url print(k, homepage + fil_url.group("film_url")) film_content = urlopen(homepage + fil_url.group("film_url")).read().decode("gbk") # 獲取2019新片精品源代碼 film_obj = re.compile(r'◎譯 名(?P<trans_name>.*?)<br />.*?◎片 名(?P<film_name>.*?)<br />.*?' r'◎主 演(?P<film_actor>.*?)<br /><br />.*?<td style="WORD-WRAP: break-word" ' r'bgcolor="#fdfddf"><a href="(?P<down_url>.*?)">', re.S) yield film_obj.finditer(film_content) # 生成器函數 def record_dytt_info(film_ite, json_file, i): for film in film_ite: # 遍歷每部電影 film_dict = {} film_dic = {} film_dic['trans_name'] = film.group("trans_name").strip().replace('·', '·') # 電影譯名放入字典 film_dic['film_name'] = film.group("film_name").strip().replace('·', '·') # 電影名放入字典 farts_lst = film.group("film_actor").strip().split('<br />') # 主演列表 farts = [] for art in farts_lst: # 遍歷主演 farts.append(art.strip().replace('·', '·')) # 字符串替換 film_dic['film_actor'] = farts # 主演放入字典 film_dic['down_url'] = film.group("down_url").strip() # 下載url放入字典 film_dict[i] = film_dic # 將字典放入電影數數字典 mode_type = "w" if i == 1 else "a" # 當i=1時,清空json文件,否則追加寫入 with open(json_file, mode=mode_type, encoding="utf-8") as f: f.write(json.dumps(film_dict, ensure_ascii=False)+",\n") if __name__ == "__main__": homepage = "https://www.dytt8.net" # 電影天堂主頁 film_url_ite = get_dytt_url(homepage) # 電影url迭代器 for i, film_info_ite in enumerate(get_dytt_info(film_url_ite), 1): # 遍歷迭代器函數 record_dytt_info(film_info_ite, "film_info.json", i) # 獲取電影的主演/名字/下載鏈接