美文网首页python开发程序员Pythoner集中营
Python:获取豆瓣电影TOP250列表

Python:获取豆瓣电影TOP250列表

作者: 一名普通用户 | 来源:发表于2017-08-08 21:50 被阅读123次

    完成这些操作主要用到了 BeautifulSoup 和 requests 这两个库,使用之前要提前安装好相应的库。

    参考:
    Quickstart — Requests 2.18.3 documentation
    Beautiful Soup 4.4.0 文档 — beautifulsoup 4.4.0 文档

    代码如下:

    #!/usr/bin/python3
    # -*- coding:utf-8 -*-
    
    from bs4 import BeautifulSoup
    import requests,re
    
    #列表第一页的开始地址
    ROOT_URL = 'https://movie.douban.com/top250'
    
    def download_html(url):
        # 伪装成浏览器
        headers = {'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:54.0) Gecko/20100101 Firefox/54.0'}
        return requests.get(url,headers=headers).content
    
    def parse_html(html):
        soup = BeautifulSoup(html,'lxml') #创建 BeautifulSoup 对象
        movie_list = soup.find('ol',attrs={'class':'grid_view'}) # 定位到每一页的电影列表
        
        result = []
    
        for val in movie_list.find_all('li'):
            rank = val.find('em').getText() #每部电影的排名
            rating = val.find('span',attrs={'class':'rating_num'}).getText() #评分
            #电影介绍,有几部电影是没有简介的(例如《小森林 夏秋篇》),这需要注意
            description = val.find('p',attrs={'class':'quote'}) 
    
            if description:
                description = description.find('span').getText()
    
            info = val.find('a') # 提供给以下三行用
            url = info['href'] # 电影在豆瓣上的链接
            name = info.find('img')['alt'] #电影名
            cover = info.find('img')['src'] #电影的封面图片地址
    
            add = {}
            add['rank'] = rank
            add['rating'] = rating
            add['name'] = name
            add['cover'] = cover
            add['url'] = url
            if description:
                add['description'] = description
            result.append(add)
    
        return result
    
    
    if __name__ == '__main__':
    
        result = []
        with open('result.md','w') as file: #用 markdown 形式保存最终结果
            for start in range(0,250,25):
                #网址有https://movie.douban.com/top250?start=n&filter= 的规律
                # n 从 0 到 225,每次递增 25
                url = ROOT_URL + "?start=" + str(start) 
                # 输出地址,好知道到了那一页
                print(url)
    
                html_data = download_html(url)  
        
                for val in parse_html(html_data):
                    # 接下来一行是显示电影封面图片,显示效果不好暂时注释掉
                    #file.write('![](' + val['cover'] + ')\n')
                    file.write(val['rank']+'. [**'+val['name']+'**]('+val['url']+') ( '+val['rating']+' )\n')
                    if 'description' in val:
    file.write(val['description']+'\n')
    

    最终结果(信息量有点大,暂时只贴上前 20 个结果)

    1. 肖申克的救赎 ( 9.6 )
      希望让人自由。
    2. 霸王别姬 ( 9.5 )
      风华绝代。
    3. 这个杀手不太冷 ( 9.4 )
      怪蜀黍和小萝莉不得不说的故事。
    4. 阿甘正传 ( 9.4 )
      一部美国近现代史。
    5. 美丽人生 ( 9.5 )
      最美的谎言。
    6. 千与千寻 ( 9.2 )
      最好的宫崎骏,最好的久石让。
    7. 辛德勒的名单 ( 9.4 )
      拯救一个人,就是拯救整个世界。
    8. 泰坦尼克号 ( 9.2 )
      失去的才是永恒的。
    9. 盗梦空间 ( 9.2 )
      诺兰给了我们一场无法盗取的梦。
    10. 机器人总动员 ( 9.3 )
      小瓦力,大人生。
    11. 海上钢琴师 ( 9.2 )
      每个人都要走一条自己坚定了的路,就算是粉身碎骨。
    12. 三傻大闹宝莱坞 ( 9.1 )
      英俊版憨豆,高情商版谢耳朵。
    13. 忠犬八公的故事 ( 9.2 )
      永远都不能忘记你所爱的人。
    14. 放牛班的春天 ( 9.2 )
      天籁一般的童声,是最接近上帝的存在。
    15. 大话西游之大圣娶亲 ( 9.2 )
      一生所爱。
    16. 教父 ( 9.2 )
      千万不要记恨你的对手,这样会让你失去理智。
    17. 龙猫 ( 9.1 )
      人人心中都有个龙猫,童年就永远不会消失。
    18. 楚门的世界 ( 9.0 )
      如果再也不能见到你,祝你早安,午安,晚安。
    19. 乱世佳人 ( 9.2 )
      Tomorrow is another day.
    20. 天堂电影院 ( 9.1 )
      那些吻戏,那些青春,都在影院的黑暗里被泪水冲刷得无比清晰。

    最后我个人不是很想把它称为爬虫,在我看来这更多的是一种批量话的自动操作,能免去很多麻烦,所以没有在标题中提及爬虫这个词。

    欢迎评论或者点击喜欢~

    来自个人 Python 文集

    相关文章

      网友评论

        本文标题:Python:获取豆瓣电影TOP250列表

        本文链接:https://www.haomeiwen.com/subject/gyuxrxtx.html