Python爬蟲入門 | 2 爬取豆瓣電影信息

這是一個(gè)適用于小白的Python爬蟲免費(fèi)教學(xué)課程,只有7節(jié),讓零基礎(chǔ)的你初步了解爬蟲,跟著課程內(nèi)容能自己爬取資源。看著文章,打開電腦動(dòng)手實(shí)踐,平均45分鐘就能學(xué)完一節(jié),如果你愿意,今天內(nèi)你就可以邁入爬蟲的大門啦~

好啦,正式開始我們的第二節(jié)課《爬取豆瓣電影信息》吧!啦啦哩啦啦,都看黑板~

1. 爬蟲原理

1.1 爬蟲基本原理

聽了那么多的爬蟲,到底什么是爬蟲?爬蟲又是如何工作的呢?我們先從“爬蟲原理”說起。

爬蟲又稱為網(wǎng)頁蜘蛛,是一種程序或腳本。但重點(diǎn)在于:它能夠按照一定的規(guī)則,自動(dòng)獲取網(wǎng)頁信息。爬蟲的通用框架如下:

1.挑選種子URL;

2.將這些URL放入待抓取的URL隊(duì)列;

3.取出待抓取的URL,下載并存儲(chǔ)進(jìn)已下載網(wǎng)頁庫中。此外,將這些URL放入待抓取URL隊(duì)列,進(jìn)入下一循環(huán);

4.分析已抓取隊(duì)列中的URL,并且將URL放入待抓取URL隊(duì)列,從而進(jìn)入下一循環(huán)。

咳咳~

還是用一個(gè)具體的例子,來說明吧!

1.2 一個(gè)爬蟲例子

爬蟲獲取網(wǎng)頁信息和人工獲取信息,其實(shí)原理是一致的,比如我們要獲取電影的“評(píng)分”信息:

人工操作步驟:

獲取電影信息的頁面

定位(找到)到評(píng)分信息的位置

復(fù)制、保存我們想要的評(píng)分?jǐn)?shù)據(jù)

爬蟲操作步驟:

請求并下載電影頁面信息

解析并定位評(píng)分信息

保存評(píng)分?jǐn)?shù)據(jù)

感覺是不是很像?

1.3 爬蟲的基本流程

簡單來說,我們向服務(wù)器發(fā)送請求后,會(huì)得到返回的頁面,通過解析頁面之后,我們可以抽取我們想要的那部分信息,并存儲(chǔ)在指定的文檔或數(shù)據(jù)庫中。這樣,我們想要的信息就被我們“爬”下來啦~

2. Requests+Xpath 爬取豆瓣電影

Python 中爬蟲相關(guān)的包很多:Urllib、requsts、bs4……我們從 requests+xpath 講起,因?yàn)樘菀咨鲜至?!學(xué)習(xí)之后你就會(huì)發(fā)現(xiàn),BeautifulSoup 還是稍微有點(diǎn)難的。

下面我們用 requests+xpath 爬取豆瓣電影:

2.1 安裝 Python 應(yīng)用包:requests、lxml

如果是首次使用Requests+Xpath,首先需要安裝兩個(gè)包:requests和lxml,在終端分別輸入以下兩行代碼即可(安裝方法在第1節(jié)中已講過):

pip install requestspip install lxml

2.2 導(dǎo)入我們需要的 Python 模塊

我們在jupyter中編寫代碼,首先導(dǎo)入我們需要的兩個(gè)模塊:

import requestsfrom lxml import etree

Python中導(dǎo)入庫直接用”import+庫名“,需要用庫里的某種方法用”from+庫名+import+方法名“。這里我們需要requests來下載網(wǎng)頁,用lxml.etree來解析網(wǎng)頁。

2.3 獲取豆瓣電影目標(biāo)網(wǎng)頁并解析

我們要爬取豆瓣電影《肖申克的救贖》上面的一些信息,網(wǎng)站地址是:

https://movie.douban.com/subject/1292052/

給定 url 并用 requests.get() 方法來獲取頁面的text,用 etree.HTML() 來解析下載的頁面數(shù)據(jù)“data”。

url = 'https://movie.douban.com/subject/1292052/'data = requests.get(url).texts=etree.HTML(data)

2.4 獲取電影名稱

獲取元素的Xpath信息并獲得文本:

file=s.xpath('元素的Xpath信息/text()')

這里的“元素的Xpath信息”是需要我們手動(dòng)獲取的,獲取方式為:定位目標(biāo)元素,在網(wǎng)站上依次點(diǎn)擊:右鍵 > 檢查

快捷鍵“shift+ctrl+c”,移動(dòng)鼠標(biāo)到對應(yīng)的元素時(shí)即可看到對應(yīng)網(wǎng)頁代碼:

在電影標(biāo)題對應(yīng)的代碼上依次點(diǎn)擊 右鍵 > Copy > Copy XPath,獲取電影名稱的Xpath:

這樣我們就把元素中的Xpath信息復(fù)制下來了:

//*[@id="content"]/h1/span[1]

放到代碼中并打印信息:

film=s.xpath('//*[@id="content"]/h1/span[1]/text()')print(film)

2.5 代碼以及運(yùn)行結(jié)果

以上完整代碼如下:

import requestsfrom lxml import etreeurl = 'https://movie.douban.com/subject/1292052/'data = requests.get(url).texts=etree.HTML(data)film=s.xpath('//*[@id="content"]/h1/span[1]/text()')print(film)

在 Jupyter 中運(yùn)行完整代碼及結(jié)果如下:

至此,我們完成了爬取豆瓣電影《肖申克的救贖》中“電影名稱”信息的代碼編寫,可以在 Jupyter 中運(yùn)行。

2.6 獲取其它元素信息

除了電影的名字,我們還可以獲取導(dǎo)演、主演、電影片長等信息,獲取的方式是類似的。代碼如下:

director=s.xpath('//*[@id="info"]/span[1]/span[2]/a/text()')? ? #導(dǎo)演actor1=s.xpath('//*[@id="info"]/span[3]/span[2]/a[1]/text()')? #主演1actor2=s.xpath('//*[@id="info"]/span[3]/span[2]/a[2]/text()')? #主演2actor3=s.xpath('//*[@id="info"]/span[3]/span[2]/a[3]/text()')? #主演3time=s.xpath(‘//*[@id="info"]/span[13]/text()')? #電影片長

觀察上面的代碼,發(fā)現(xiàn)獲取不同“主演”信息時(shí),區(qū)別只在于“a[x]”中“x”的數(shù)字大小不同。實(shí)際上,要一次性獲取所有“主演”的信息時(shí),用不加數(shù)字的“a”表示即可。代碼如下:

actor=s.xpath('//*[@id="info"]/span[3]/span[2]/a/text()')? #主演

完整代碼如下:

import requestsfrom lxml import etreeurl = 'https://movie.douban.com/subject/1292052/'data = requests.get(url).texts=etree.HTML(data)film=s.xpath('//*[@id="content"]/h1/span[1]/text()')director=s.xpath('//*[@id="info"]/span[1]/span[2]/a/text()')actor=s.xpath('//*[@id="info"]/span[3]/span[2]/a/text()')time=s.xpath('//*[@id="info"]/span[13]/text()')print('電影名稱:',film)print('導(dǎo)演:',director)print('主演:',actor)print('片長:',time)

在jupyter中運(yùn)行完整代碼及結(jié)果如下:

3. 關(guān)于Requests

Requests庫官方的介紹有這么一句話:Requests 唯一的一個(gè)非轉(zhuǎn)基因的 Python HTTP 庫,人類可以安全享用。

這句話直接并霸氣地宣示了 Requests 庫是 python 最好的一個(gè)HTTP庫。為什么它有這樣的底氣?如有興趣請閱讀?Requests 官方文檔?。

Requests 常用的七種方法:

4. 關(guān)于解析神器 Xpath

Xpath 即為 XML 路徑語言(XML Path Language),它是一種用來確定 XML 文檔中某部分位置的語言。

Xpath 基于 XML 的樹狀結(jié)構(gòu),提供在數(shù)據(jù)結(jié)構(gòu)樹中找尋節(jié)點(diǎn)的能力。起初 Xpath 的提出的初衷是將其作為一個(gè)通用的、介于 Xpointer 與 XSL 間的語法模型。但是Xpath 很快的被開發(fā)者采用來當(dāng)作小型查詢語言。

可以閱讀該文檔了解更多關(guān)于 Xpath 的知識(shí)。

Xpath解析網(wǎng)頁的流程:

1.首先通過Requests庫獲取網(wǎng)頁數(shù)據(jù)

2.通過網(wǎng)頁解析,得到想要的數(shù)據(jù)或者新的鏈接

3.網(wǎng)頁解析可以通過 Xpath 或者其它解析工具進(jìn)行,Xpath 在是一個(gè)非常好用的網(wǎng)頁解析工具

常見的網(wǎng)頁解析方法比較

正則表達(dá)式使用比較困難,學(xué)習(xí)成本較高

BeautifulSoup 性能較慢,相對于 Xpath 較難,在某些特定場景下有用

Xpath 使用簡單,速度快(Xpath是lxml里面的一種),是入門最好的選擇

好了,這節(jié)課就到這里!

白白~

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

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

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