1. 程式人生 > >Python爬蟲入門 | 爬取豆瓣電影信息

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

Python 編程語言 web開發

這是一個適用於小白的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 requests

pip install lxml
技術分享圖片
2.2 導入我們需要的 Python 模塊我們在jupyter中編寫代碼,首先導入我們需要的兩個模塊:import requests
from 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).text
s=etree.HTML(data)
2.4 獲取電影名稱獲取元素的Xpath信息並獲得文本:file=s.xpath(‘元素的Xpath信息/text()‘)
這裏的“元素的Xpath信息”是需要我們手動獲取的,獲取方式為:定位目標元素,在網站上依次點擊:右鍵 > 檢查

技術分享圖片快捷鍵“shift+ctrl+c”,移動鼠標到對應的元素時即可看到對應網頁代碼:
![](http://i2.51cto.com/images/blog/201804/26/5e2eddc1caa0a6a405f762c444761fc2.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
這樣我們就把元素中的Xpath信息復制下來了://*[@id="content"]/h1/span[1]
br/>快捷鍵“shift+ctrl+c”,移動鼠標到對應的元素時即可看到對應網頁代碼:
![](http://i2.51cto.com/images/blog/201804/26/5e2eddc1caa0a6a405f762c444761fc2.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
這樣我們就把元素中的Xpath信息復制下來了://*[@id="content"]/h1/span[1]
print(film)
2.5 代碼以及運行結果以上完整代碼如下:import requests
from lxml import etree

url = ‘https://movie.douban.com/subject/1292052/‘
data = requests.get(url).text
s=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()‘) #主演1
actor2=s.xpath(‘//[@id="info"]/span[3]/span[2]/a[2]/text()‘) #主演2
actor3=s.xpath(‘//
[@id="info"]/span[3]/span[2]/a[3]/text()‘) #主演3
time=s.xpath(‘//[@id="info"]/span[13]/text()‘) #電影片長
觀察上面的代碼,發現獲取不同“主演”信息時,區別只在於“a[x]”中“x”的數字大小不同。實際上,要一次性獲取所有“主演”的信息時,用不加數字的“a”表示即可。代碼如下:actor=s.xpath(‘//
[@id="info"]/span[3]/span[2]/a/text()‘) #主演
完整代碼如下:import requests
from lxml import etree

url = ‘https://movie.douban.com/subject/1292052/‘
data = requests.get(url).text
s=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()‘)
br/>actor=s.xpath(‘//*[@id="info"]/span[3]/span[2]/a/text()‘)

print(‘電影名稱:‘,film)
print(‘導演:‘,director)
print(‘主演:‘,actor)
print(‘片長:‘,time)
在jupyter中運行完整代碼及結果如下:

技術分享圖片

  1. 關於RequestsRequests庫官方的介紹有這麽一句話:Requests 唯一的一個非轉基因的 Python HTTP 庫,人類可以安全享用。這句話直接並霸氣地宣示了 Requests 庫是 python 最好的一個HTTP庫。為什麽它有這樣的底氣?如有興趣請閱讀 Requests 官方文檔 。Requests 常用的七種方法:

技術分享圖片

  1. 關於解析神器 XpathXpath 即為 XML 路徑語言(XML Path Language),它是一種用來確定 XML 文檔中某部分位置的語言。Xpath 基於 XML 的樹狀結構,提供在數據結構樹中找尋節點的能力。起初 Xpath 的提出的初衷是將其作為一個通用的、介於 Xpointer 與 XSL 間的語法模型。但是Xpath 很快的被開發者采用來當作小型查詢語言。可以閱讀該文檔了解更多關於 Xpath 的知識。Xpath解析網頁的流程:1.首先通過Requests庫獲取網頁數據2.通過網頁解析,得到想要的數據或者新的鏈接3.網頁解析可以通過 Xpath 或者其它解析工具進行,Xpath 在是一個非常好用的網頁解析工具

技術分享圖片
常見的網頁解析方法比較
技術分享圖片
正則表達式使用比較困難,學習成本較高
BeautifulSoup 性能較慢,相對於 Xpath 較難,在某些特定場景下有用
Xpath 使用簡單,速度快(Xpath是lxml裏面的一種),是入門最好的選擇
好了,這節課就到這裏!

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