day02 爬取豆瓣电影信息代码

时间:2021-12-04 12:24:48
# 请求url:
#        https://movie.douban.com/top250
# 请求方式:
#        GET
# 请求头:
#      User-Agent
#      cookies
'''
爬取豆瓣电影信息:
    电影名称
    电影url
    电影导演
    电影主演
    电影年份
    电影类型
    电影评分
    电影简介
    电影评论

1.分析所有主页的URL
第一页:https://movie.douban.com/top250?start=0&filter=
第二页:https://movie.douban.com/top250?start=25&filter=
第三页:https://movie.douban.com/top250?start=50&filter=
'''
import  requests
import  re
#爬虫三部曲
#1.发送请求
def get_page(url):
    reponse=requests.get(url)
    return reponse
#2.解析数据
def parse_index(html):
    '''
    <div class="item">.*?<em class="">(.*?)</em>.*?<a href="(.*?)">
    .*?<span class="title">(.*?)</span>.*?导演: (.*?)主演: (.*?)<br>(.*?)</p>
    .*?<span class="rating_num" .*?>(.*?)</span>.*?<span>(.*?)人评价</span>
    .*?<span class="inq">(.*?)</span>
    '''
    movie_list=re.findall('<div class="item">.*?<em class="">(.*?)</em>.*?<a href="(.*?)">.*?<span class="title">(.*?)</span>.*?导演: (.*?)主演: (.*?)<br>(.*?)</p>.*?<span class="rating_num" .*?>(.*?)</span>.*?<span>(.*?)人评价</span>.*?<span class="inq">(.*?)</span>',
            html,
            re.S)
    return movie_list
#3.保存数据
def save_data(movie):
    top, m_url, name, daoyan, actor, year_type, point, talk, desc = movie
    year_type=year_type.strip('\n')
    data = f'''
              ===============欢迎来到豆瓣电影===============
                              电影排名:{top}
                              电影url:{m_url}
                              电影名称:{name}
                              电影导演:{daoyan}
                              电影主演:{actor}
                              电影类型:{year_type}
                              电影评分:{point}
                              电影简介:{desc}
                              电影评论:{talk}
              =================欢迎下次再来==================
              \n
              \n
            '''
    print(data)
    with open('douban_top250.text','a',encoding='utf-8')as f:
        f.write(data)

    print(f'电影:{name}写入成功...')

if __name__ == '__main__':
    #拼接所有主页
    num=0
    for line in range(10):
        url=f'https://movie.douban.com/top250?start={num}&filter='
        num+=25
        print(url)
        #1.往每个主页发送请求
        index_res=get_page(url)
        #2.解析主页获取电影信息
        movie_list=parse_index(index_res.text)

        for movie in movie_list:
            #print(movie)
            #3. 保存数据
            save_data(movie)