Python爬蟲(3):爬取豆瓣電影TOP250
爬蟲(3):爬取豆瓣電影TOP250
前兩次我們學習了python裡面requests庫和xpath語法,來請求網頁和解析文本,現在就用這兩個工具來完成「豆瓣電影TOP250排行榜」的爬蟲程序。
豆瓣電影TOP250
請求網頁內容
直接上代碼
import requests nnurl = https://movie.douban.com/top250 ncon = requests.get(url).contentn
返回網頁源代碼,下一步提取文本。
提取信息
n我們暫時先把這些信息取下來:影片名稱,導演演員信息,評分,評論人數,上映日期,製片國家。
# coding:utf-8 nimport requests nfrom lxml import html nnurl = https://movie.douban.com/top250 ncon = requests.get(url).content nsel = html.fromstring(con) nn# 所有的信息都在class屬性為info的div標籤里,可以先把這個節點取出來 nfor i in sel.xpath(//div[@class="info"]): n # 影片名稱 n title = i.xpath(div[@class="hd"]/a/span[@class="title"]/text())[0] n info = i.xpath(div[@class="bd"]/p[1]/text()) nn # 導演演員信息 n info_1 = info[0].replace(" ", "").replace("n", "") n # 上映日期 n date = info[1].replace(" ", "").replace("n", "").split("/")[0] n # 製片國家 n country = info[1].replace(" ", "").replace("n", "").split("/")[1] n # 影片類型 n geners = info[1].replace(" ", "").replace("n", "").split("/")[2] n # 評分 n rate = i.xpath(//span[@class="rating_num"]/text())[0] n # 評論人數 n comCount = i.xpath(//div[@class="star"]/span[4]/text())[0] n # 列印結果看看 n print title, info_1, rate, date, country, geners, comCountn
獲取分頁
點擊排行榜的下一頁鏈接,網站的URL變成下面這個樣子,翻多兩頁你再看看,是不是發現規律了。
for i in range(10): n url = https://movie.douban.com/top250?start={}&filter=.format(i*25)n
保存文件
這裡我們把結果寫入到本地txt文件,也可以使用python的csv模塊寫入到csv文件中,關於csv我們下次再介紹,這裡說說如何寫入到txt文件。
python讀寫文件方法很簡單,我們這裡再加上with-as語法
with open(filename, mode) as f: n do somethingn
mode是文件讀寫模式
w:以寫方式打開,
na:以追加模式打開 (從 EOF 開始, 必要時創建新文件)nr+:以讀寫模式打開
nw+:以讀寫模式打開 (參見 w )na+:以讀寫模式打開 (參見 a )nrb:以二進位讀模式打開nwb:以二進位寫模式打開 (參見 w )nab:以二進位追加模式打開 (參見 a )nrb+:以二進位讀寫模式打開 (參見 r+ )nwb+:以二進位讀寫模式打開 (參見 w+ )nab+:以二進位讀寫模式打開 (參見 a+ )
這裡讀寫的模式用a就可以了
完整程序
綜合上述
# coding:utf-8 nimport requests from lxml import html nimport sys nreload(sys) nsys.setdefaultencoding( "utf-8" ) nnk = 1 nfor i in range(10): n url = https://movie.douban.com/top250?start={}&filter=.format(i*25) n con = requests.get(url).content n sel = html.fromstring(con) nn # 所有的信息都在class屬性為info的div標籤里,可以先把這個節點取出來 n for i in sel.xpath(//div[@class="info"]): nn # 影片名稱 n title = i.xpath(div[@class="hd"]/a/span[@class="title"]/text())[0] n n info = i.xpath(div[@class="bd"]/p[1]/text()) n # 導演演員信息 n info_1 = info[0].replace(" ", "").replace("n", "") n # 上映日期 n date = info[1].replace(" ", "").replace("n", "").split("/")[0] n # 製片國家 n country = info[1].replace(" ", "").replace("n", "").split("/")[1] n # 影片類型 n geners = info[1].replace(" ", "").replace("n", "").split("/")[2] n # 評分 n rate = i.xpath(//span[@class="rating_num"]/text())[0] n # 評論人數 n comCount = i.xpath(//div[@class="star"]/span[4]/text())[0] nn # 列印結果看看 n print "TOP%s" % str(k) n print title, info_1, rate, date, country, geners, comCount nn # 寫入文件 n with open("top250.txt", "a") as f: n f.write("TOP%sn影片名稱:%sn評分:%s %sn上映日期:%sn上映國家:%sn%sn" % (k, title, rate, comCount, date, country, info_1)) nn f.write("==========================n") n n k += 1n
得到txt文件
寫在最後
每個電影的鏈接都可以進去到電影詳細頁面,獲取電影簡介等更加豐富內容,那這個要怎麼實現呢?先留給大家去思考吧。
Python爬蟲(1):Requests
Python爬蟲(2):XPath語法
更多詳情: 寫點Python - 知乎專欄
推薦閱讀: