''' 作业 爬去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) # 获取电影的主演/名字/下载链接