Python:獲取豆瓣電影TOP250列表

完成這些操作主要用到了 BeautifulSoup 和 requests 這兩個(gè)庫,使用之前要提前安裝好相應(yīng)的庫。

參考:
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') #創(chuàng)建 BeautifulSoup 對(duì)象
    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() #評(píng)分
        #電影介紹,有幾部電影是沒有簡(jiǎn)介的(例如《小森林 夏秋篇》),這需要注意
        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 形式保存最終結(jié)果
        for start in range(0,250,25):
            #網(wǎng)址有https://movie.douban.com/top250?start=n&filter= 的規(guī)律
            # n 從 0 到 225,每次遞增 25
            url = ROOT_URL + "?start=" + str(start) 
            # 輸出地址,好知道到了那一頁
            print(url)

            html_data = download_html(url)  
    
            for val in parse_html(html_data):
                # 接下來一行是顯示電影封面圖片,顯示效果不好暫時(shí)注釋掉
                #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')

最終結(jié)果(信息量有點(diǎn)大,暫時(shí)只貼上前 20 個(gè)結(jié)果)

  1. 肖申克的救贖 ( 9.6 )
    希望讓人自由。
  2. 霸王別姬 ( 9.5 )
    風(fēng)華絕代。
  3. 這個(gè)殺手不太冷 ( 9.4 )
    怪蜀黍和小蘿莉不得不說的故事。
  4. 阿甘正傳 ( 9.4 )
    一部美國(guó)近現(xiàn)代史。
  5. 美麗人生 ( 9.5 )
    最美的謊言。
  6. 千與千尋 ( 9.2 )
    最好的宮崎駿,最好的久石讓。
  7. 辛德勒的名單 ( 9.4 )
    拯救一個(gè)人,就是拯救整個(gè)世界。
  8. 泰坦尼克號(hào) ( 9.2 )
    失去的才是永恒的。
  9. 盜夢(mèng)空間 ( 9.2 )
    諾蘭給了我們一場(chǎng)無法盜取的夢(mèng)。
  10. 機(jī)器人總動(dòng)員 ( 9.3 )
    小瓦力,大人生。
  11. 海上鋼琴師 ( 9.2 )
    每個(gè)人都要走一條自己堅(jiān)定了的路,就算是粉身碎骨。
  12. 三傻大鬧寶萊塢 ( 9.1 )
    英俊版憨豆,高情商版謝耳朵。
  13. 忠犬八公的故事 ( 9.2 )
    永遠(yuǎn)都不能忘記你所愛的人。
  14. 放牛班的春天 ( 9.2 )
    天籟一般的童聲,是最接近上帝的存在。
  15. 大話西游之大圣娶親 ( 9.2 )
    一生所愛。
  16. 教父 ( 9.2 )
    千萬不要記恨你的對(duì)手,這樣會(huì)讓你失去理智。
  17. 龍貓 ( 9.1 )
    人人心中都有個(gè)龍貓,童年就永遠(yuǎn)不會(huì)消失。
  18. 楚門的世界 ( 9.0 )
    如果再也不能見到你,祝你早安,午安,晚安。
  19. 亂世佳人 ( 9.2 )
    Tomorrow is another day.
  20. 天堂電影院 ( 9.1 )
    那些吻戲,那些青春,都在影院的黑暗里被淚水沖刷得無比清晰。

最后我個(gè)人不是很想把它稱為爬蟲,在我看來這更多的是一種批量話的自動(dòng)操作,能免去很多麻煩,所以沒有在標(biāo)題中提及爬蟲這個(gè)詞。

歡迎評(píng)論或者點(diǎn)擊喜歡~

來自個(gè)人 Python 文集

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容