1. 程式人生 > >簡單Python爬蟲例項:抓取豆瓣熱映電影資訊

簡單Python爬蟲例項:抓取豆瓣熱映電影資訊

最近在學習Python爬蟲基礎,僅用部落格記錄下學習的過程。

學習過程基於麥子學院的課程,感謝麥子學院,感謝Joey老師。

那麼我們來看一下,怎麼抓取資料。

Chrome瀏覽器有一個開發者工具,很適合檢視網頁原始碼,所以我們用Chrome。

開啟之後是這樣:

然後我們在網頁位址列輸入豆瓣電影的連結:

https://movie.douban.com/

進入網頁以後,我們利用開發者工具中的抓取連結工具(左上角的指標工具):

點選,然後選取一個正在熱映的電影面板


然後我們看到開發者工具跳轉到該面板的原始碼處:

我們可以看到,我們所需要的資料,就在這裡,熱映資訊的是用類似一個class的字典去儲存的,在class前面li,即是它對應的Tag值,本次測試中,我們需要四個資料:電影名稱,評分,導演名,主演名單,程式碼中我們可以看到,在字典中,對應的4個Key值分別是data-title,data-rate,data-director,data-actors。

那麼我們的程式設計思想就出來了:先抓取豆瓣電影的網頁資料,然後根據tag值和data-title去篩選我們想要的class,將四個關鍵的key和value存到我們自己的字典裡,然後顯示出來。

以下,上程式碼:

# -*- coding: utf-8 -*-
import urllib2
from HTMLParser import HTMLParser

class MovieParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self.movies=[]

    def handle_starttag
(self, tag, attrs): def _attr(attrlist,attrname): for attr in attrlist: if attr[0] == attrname: return attr[1] return None #print(tag) #遍歷tag值為li且包含data-title欄位的class if tag == 'li' and _attr(attrs,'data-title'): movie={} movie['title'
] = _attr(attrs,'data-title') movie['rate'] = _attr(attrs, 'data-rate') movie['director'] = _attr(attrs, 'data-director') movie['actors'] = _attr(attrs, 'data-actors') self.movies.append(movie) print('%(title)s|%(rate)s|%(director)s|%(actors)s' % movie) def nowplaying_movies(url): #headers用來模擬瀏覽器登入環境 headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36'} req=urllib2.Request(url,headers=headers) str=urllib2.urlopen(req) #print(str.read()) parser=MovieParser() parser.feed(str.read()) str.close() return parser.movies if __name__ == '__main__': url='https://movie.douban.com/' movies=nowplaying_movies(url) import json print('%s' % json.dumps(movies,sort_keys=True,indent=4,separators=(',',':')))

執行成功以後,我們就會打印出以下資料:


完成!