python3 爬取电影天堂最新电影

'''
作业
爬去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('&middot;', '·')  # 电影译名放入字典
        film_dic['film_name'] = film.group("film_name").strip().replace('&middot;', '·')  # 电影名放入字典
        farts_lst = film.group("film_actor").strip().split('<br />')  # 主演列表
        farts = []
        for art in farts_lst:  # 遍历主演
            farts.append(art.strip().replace('&middot;', '·'))  # 字符串替换
        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)    #  获取电影的主演/名字/下载链接

 

posted on 2019-05-11 11:42  lilyxiaoyy  阅读(12625)  评论(0编辑  收藏  举报

返回
顶部