您的位置:首頁>正文

爬取豆瓣電影資訊,入門Python爬蟲的精品小案例,請收下

這是一個適用于小白的Python爬蟲免費教學課程, 只有7節, 讓零基礎的你初步瞭解爬蟲, 跟著課程內容能自己爬取資源。 看著文章, 打開電腦動手實踐, 平均45分鐘就能學完一節, 如果你願意, 今天內你就可以邁入爬蟲的大門啦~

好啦, 正式開始我們的第二節課《爬取豆瓣電影資訊》吧!啦啦哩啦啦, 都看黑板~

1. 爬蟲原理

1.1 爬蟲基本原理

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

爬蟲又稱為網頁蜘蛛, 是一種程式或腳本。 但重點在於:它能夠按照一定的規則, 自動獲取網頁資訊。

爬蟲的通用框架如下:

1.挑選種子URL;

2.將這些URL放入待抓取的URL佇列;

3.取出待抓取的URL, 下載並存儲進已下載網頁庫中。 此外, 將這些URL放入待抓取URL佇列, 進入下一迴圈;

4.分析已抓取佇列中的URL, 並且將URL放入待抓取URL佇列, 從而進入下一迴圈。

咳咳~

還是用一個具體的例子,

來說明吧!

1.2 一個爬蟲例子

爬蟲獲取網頁資訊和人工獲取資訊, 其實原理是一致的, 比如我們要獲取電影的“評分”資訊:

人工作業步驟:

獲取電影資訊的頁面

定位(找到)到評分資訊的位置

複製、保存我們想要的評分資料

爬蟲操作步驟:

請求並下載電影頁面資訊

解析並定位評分資訊

保存評分資料

感覺是不是很像?

1.3 爬蟲的基本流程

簡單來說, 我們向伺服器發送請求後, 會得到返回的頁面, 通過解析頁面之後, 我們可以抽取我們想要的那部分資訊, 並存儲在指定的文檔或資料庫中。 這樣, 我們想要的資訊就被我們“爬”下來啦~

2. Requests+Xpath 爬取豆瓣電影

Python 中爬蟲相關的包很多:Urllib、requsts、bs4……我們從 requests+xpath 講起, 因為太容易上手了!學習之後你就會發現, BeautifulSoup 還是稍微有點難的。

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

2.1 安裝 Python 應用包:requests、lxml

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

pip install requestspip install lxml

2.2 導入我們需要的 Python 模組

我們在jupyter中編寫代碼, 首先導入我們需要的兩個模組:

import requestsfrom lxml import etree

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

2.3 獲取豆瓣電影目標網頁並解析

我們要爬取豆瓣電影《肖申克的救贖》上面的一些資訊, 網站位址是:

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

給定 url 並用 requests.get() 方法來獲取頁面的text, 用 etree.HTML() 來解析下載的頁面資料“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資訊”是需要我們手動獲取的, 獲取方式為:定位目標元素, 在網站上依次點擊:右鍵 > 檢查

快速鍵“shift+ctrl+c”, 移動滑鼠到對應的元素時即可看到對應網頁代碼:

在電影標題對應的代碼上依次點擊 右鍵 > Copy > Copy XPath, 獲取電影名稱的Xpath:

這樣我們就把元素中的Xpath資訊複製下來了:

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

放到代碼中並列印資訊:

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

2.5 代碼以及運行結果

以上完整代碼如下:

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 中運行完整代碼及結果如下:

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

2.6 獲取其它元素資訊

除了電影的名字,我們還可以獲取導演、主演、電影片長等資訊,獲取的方式是類似的。代碼如下:

director=s.xpath('//*[@id="info"]/span[1]/span[2]/a/text()') #導演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()') #電影片長

觀察上面的代碼,發現獲取不同“主演”資訊時,區別只在於“a[x]”中“x”的數位大小不同。實際上,要一次性獲取所有“主演”的資訊時,用不加數位的“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('導演:',director)print('主演:',actor)print('片長:',time)

在jupyter中運行完整代碼及結果如下:

3. 關於Requests

Requests庫官方的介紹有這麼一句話:Requests 唯一的一個非轉基因的 Python HTTP 庫,人類可以安全享用。

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

Requests 常用的七種方法:

4. 關於解析神器 Xpath

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

Xpath 基於 XML 的樹狀結構,提供在資料結構樹中找尋節點的能力。起初 Xpath 的提出的初衷是將其作為一個通用的、介於 Xpointer 與 XSL 間的語法模型。但是Xpath 很快的被開發者採用來當作小型查詢語言。

可以閱讀該文檔瞭解更多關於 Xpath 的知識。

Xpath解析網頁的流程:

1.首先通過Requests庫獲取網頁數據

2.通過網頁解析,得到想要的資料或者新的連結

3.網頁解析可以通過 Xpath 或者其它解析工具進行,Xpath 在是一個非常好用的網頁解析工具

常見的網頁解析方法比較

規則運算式使用比較困難,學習成本較高

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

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

好了,這節課就到這裡!

獲取電影名稱的Xpath:

這樣我們就把元素中的Xpath資訊複製下來了:

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

放到代碼中並列印資訊:

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

2.5 代碼以及運行結果

以上完整代碼如下:

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 中運行完整代碼及結果如下:

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

2.6 獲取其它元素資訊

除了電影的名字,我們還可以獲取導演、主演、電影片長等資訊,獲取的方式是類似的。代碼如下:

director=s.xpath('//*[@id="info"]/span[1]/span[2]/a/text()') #導演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()') #電影片長

觀察上面的代碼,發現獲取不同“主演”資訊時,區別只在於“a[x]”中“x”的數位大小不同。實際上,要一次性獲取所有“主演”的資訊時,用不加數位的“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('導演:',director)print('主演:',actor)print('片長:',time)

在jupyter中運行完整代碼及結果如下:

3. 關於Requests

Requests庫官方的介紹有這麼一句話:Requests 唯一的一個非轉基因的 Python HTTP 庫,人類可以安全享用。

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

Requests 常用的七種方法:

4. 關於解析神器 Xpath

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

Xpath 基於 XML 的樹狀結構,提供在資料結構樹中找尋節點的能力。起初 Xpath 的提出的初衷是將其作為一個通用的、介於 Xpointer 與 XSL 間的語法模型。但是Xpath 很快的被開發者採用來當作小型查詢語言。

可以閱讀該文檔瞭解更多關於 Xpath 的知識。

Xpath解析網頁的流程:

1.首先通過Requests庫獲取網頁數據

2.通過網頁解析,得到想要的資料或者新的連結

3.網頁解析可以通過 Xpath 或者其它解析工具進行,Xpath 在是一個非常好用的網頁解析工具

常見的網頁解析方法比較

規則運算式使用比較困難,學習成本較高

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

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

好了,這節課就到這裡!

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示