Python 爬取豆瓣电影Top250并保存本地

昨天学习了使用Python爬取网页上的图片,今天我们来学习使用Python爬取电影网站排名信息保存到本地Excel中,下面以豆瓣电影网为例:

首先我们的需求是爬取1-10页的每个电影信息,包括排名,电影名称,导演,评分,评语等

Python 爬取豆瓣电影Top250并保存本地_第1张图片

下面来分析一下豆瓣电影Top250的页面:
一页数据25条,每一个item对应到html里的一条

  • 标签 展开li,可以看到里面的内容包括片名、导演、演员、评分等等,就是我们所要抓取的内容。一页有25条数据,总共十页,要拿到这250条数据,要做十次循环,每一页对应到的链接肯定是不同的,那我们应该如何获取这些链接呢,最简单的就是用拼链接来获取了,当然这能让我们进一步学习如何做页面的分析。
    Python 爬取豆瓣电影Top250并保存本地_第2张图片
  • 每个页面跳动25,也就是说他的步长为25,这样就好办了

    for x in range(0,226,25):
    

    Python 爬取豆瓣电影Top250并保存本地_第3张图片
    创建一个Excel,保存到你项目的同一个目录
    Python 爬取豆瓣电影Top250并保存本地_第4张图片
    下面就开始详细写代码吧:
    首先还是导入几个包:

    import requests
    from lxml import etree
    import csv
    

    第一部电影的详细定位:

    rank = div.xpath('div[1]/em/text()')[0]
    #电影名称
    movie_name = div.xpath('div[2]/div[1]/a/span/text()')
    #导演
    director = div.xpath('div[2]/div[2]/p/text()')
    #评分
    grade = div.xpath('div[2]/div[2]/div/span[2]/text()')[0]
    #短评
    #replace():把**字符替换成**
    comment_num = div.xpath('div[2]/div[2]/div/span[4]/text()')[0].replace("人评价","")
    

    完整代码:

    
    import requests
    from lxml import etree
    import csv
    f = open("movie.csv","w",encoding="GB18030",newline="")
    writer = csv.DictWriter(f,fieldnames=["电影排名","电影名称","演员表","电影评分","电影评论数","电影短评"])
    writer.writeheader()
    #拼接网址,发起请求
    for x in range(0,226,25):
        #拼接出来每一页的地址
        url = "https://movie.douban.com/top250?start={}&filter=".format(x)
        print("正在爬取--{}--网址的数据".format(url))
        response = requests.get(url=url)
        html_obj = etree.HTML(response.text)
        div_list = html_obj.xpath('//div[@class="item"]')
        for div in div_list:
            rank = div.xpath('div[1]/em/text()')[0]
            movie_name = div.xpath('div[2]/div[1]/a/span/text()')
            director = div.xpath('div[2]/div[2]/p/text()')
            grade = div.xpath('div[2]/div[2]/div/span[2]/text()')[0]
            #replace():把**字符替换成**
            comment_num = div.xpath('div[2]/div[2]/div/span[4]/text()')[0].replace("人评价","")
            #因为有的电影没有短评,强行匹配短评会报错!
            try:
                short_comment = div.xpath('div[2]/div[2]/p[2]/span/text()')[0]
            except Exception as e:
                short_comment="没有短评"
            #定义一个字符串,存储清理过后的电影名称
            movie_name_string = ''
            for movie in movie_name:
                #把电影名称中的\xa0替换成空,然后把处理过后的电影名称拼接起来
                movie_name_string+=movie.replace("\xa0","")
            #定义一个字符串,存储清理过后的导演信息
            movie_director_string = ''
            for movie_director in director:
                movie_director_string+=movie_director.replace('\n',"").replace("\xa0","").replace(" ","")
            movie_dict = {"电影排名":rank,"电影名称":movie_name_string,"演员表":movie_director_string,"电影评分":grade,"电影评论数":comment_num,"电影短评":short_comment}
            #一次写入一行数据
            writer.writerow(movie_dict)
    f.close()
    
    
    

    豆瓣可能有时候设置反爬虫机制,数据有时候会爬不下来
    换个IP地址就好了,就是换个网,连手机wife也行哦!
    运行后就可以去本地看数据了!
    Python 爬取豆瓣电影Top250并保存本地_第5张图片
    可以看到一共250条数据
    Python 爬取豆瓣电影Top250并保存本地_第6张图片
    **

    做的不好 仅供参考

    **

    你可能感兴趣的:(Python基础,解析网页)