標籤:

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

n得到這個初步結果就表達爬取成功,第一頁總共25記錄,下面來看看如何獲取剩下的分頁。

獲取分頁

點擊排行榜的下一頁鏈接,網站的URL變成下面這個樣子,翻多兩頁你再看看,是不是發現規律了。

nURL中「start」元素的值等於當前頁列表第一位的TOP序號,當然是加一之後。OK,一共十頁,一頁25項。分頁請求的寫法用一個for循環來完成:

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 - 知乎專欄


推薦閱讀:

TAG:Python | 爬虫 |