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

這是一個適用于小白的Python爬蟲免費教學課程迷帜,只有7節(jié),讓零基礎的你初步了解爬蟲冠胯,跟著課程內容能自己爬取資源锦针∧嗡眩看著文章,打開電腦動手實踐舀瓢,平均45分鐘就能學完一節(jié)耗美,如果你愿意航缀,今天內你就可以邁入爬蟲的大門啦~

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

1. 爬蟲原理

1.1 爬蟲基本原理

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

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

1.挑選種子URL;

2.將這些URL放入待抓取的URL隊列奢方;

3.取出待抓取的URL蟋字,下載并存儲進已下載網(wǎng)頁庫中扭勉。此外,將這些URL放入待抓取URL隊列忠聚,進入下一循環(huán)两蟀;

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

咳咳~

還是用一個具體的例子膛堤,來說明吧骑祟!

1.2 一個爬蟲例子

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

人工操作步驟:

獲取電影信息的頁面

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

復制舟茶、保存我們想要的評分數(shù)據(jù)

爬蟲操作步驟:

請求并下載電影頁面信息

解析并定位評分信息

保存評分數(shù)據(jù)

感覺是不是很像堵第?

1.3 爬蟲的基本流程

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

2. Requests+Xpath 爬取豆瓣電影

Python 中爬蟲相關的包很多:Urllib宇挫、requsts酪术、bs4……我們從 requests+xpath 講起翠储,因為太容易上手了援所!學習之后你就會發(fā)現(xiàn),BeautifulSoup 還是稍微有點難的挪略。

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

2.1 安裝 Python 應用包:requests杠娱、lxml

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

pip install requestspip install lxml

2.2 導入我們需要的 Python 模塊

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

import requestsfrom lxml import etree

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

2.3 獲取豆瓣電影目標網(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信息”是需要我們手動獲取的殴胧,獲取方式為:定位目標元素,在網(wǎng)站上依次點擊:右鍵 > 檢查

快捷鍵“shift+ctrl+c”竿屹,移動鼠標到對應的元素時即可看到對應網(wǎng)頁代碼:

在電影標題對應的代碼上依次點擊 右鍵 > 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()')? #電影片長

觀察上面的代碼,發(fā)現(xiàn)獲取不同“主演”信息時蝴蜓,區(qū)別只在于“a[x]”中“x”的數(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('導演:',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 的樹狀結構豹芯,提供在數(shù)據(jù)結構樹中找尋節(jié)點的能力悄雅。起初 Xpath 的提出的初衷是將其作為一個通用的、介于 Xpointer 與 XSL 間的語法模型铁蹈。但是Xpath 很快的被開發(fā)者采用來當作小型查詢語言宽闲。

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

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

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

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

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

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

正則表達式使用比較困難,學習成本較高

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

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

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

白白~

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末厘托,一起剝皮案震驚了整個濱河市友雳,隨后出現(xiàn)的幾起案子稿湿,更是在濱河造成了極大的恐慌铅匹,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饺藤,死亡現(xiàn)場離奇詭異包斑,居然都是意外死亡流礁,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門罗丰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來神帅,“玉大人,你說我怎么就攤上這事萌抵≌矣” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵绍填,是天一觀的道長霎桅。 經(jīng)常有香客問我,道長讨永,這世上最難降的妖魔是什么滔驶? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮卿闹,結果婚禮上揭糕,老公的妹妹穿的比我還像新娘。我一直安慰自己锻霎,他們只是感情好著角,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著旋恼,像睡著了一般雇寇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蚌铜,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天锨侯,我揣著相機與錄音,去河邊找鬼冬殃。 笑死囚痴,一個胖子當著我的面吹牛,可吹牛的內容都是我干的审葬。 我是一名探鬼主播深滚,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼涣觉!你這毒婦竟也來了痴荐?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤官册,失蹤者是張志新(化名)和其女友劉穎生兆,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體膝宁,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡鸦难,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年根吁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片合蔽。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡击敌,死狀恐怖,靈堂內的尸體忽然破棺而出拴事,到底是詐尸還是另有隱情沃斤,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布刃宵,位于F島的核電站轰枝,受9級特大地震影響,放射性物質發(fā)生泄漏组去。R本人自食惡果不足惜鞍陨,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望从隆。 院中可真熱鬧诚撵,春花似錦、人聲如沸键闺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辛燥。三九已至筛武,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挎塌,已是汗流浹背徘六。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留榴都,地道東北人待锈。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像嘴高,于是被迫代替她去往敵國和親竿音。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內容

  • 嘆一群愚人舉步維艱拴驮,惺惺作態(tài)春瞬。 總是自己為難自己, 卻準備無數(shù)借口等著辯白套啤。 怕是愚人創(chuàng)造了這世界宽气。 這世界才有了...
    枕下有那么多個春秋大夢閱讀 226評論 0 0
  • 你一定很難想象世界上竟然有這樣一群可愛寶寶瑜伽練習著。 瞧!看我站立前驅抹竹。 噓线罕!不要說話止潮,我在用心感受世界寧靜窃判。 ...
    LP_ProgramLife閱讀 147評論 0 0
  • 微信是一個社交工具燃乍,而微商玩的就是社交經(jīng)濟唆樊。如果你不太擅長跟別人溝通互動,那么你很難做好微商刻蟹!關于“互動”相關的問...
    帥哥已絕跡閱讀 192評論 0 0
  • 文/雁南飛 吃完西瓜逗旁,順便把種子清洗干凈,密密的種上舆瘪,一個多星期就長成這樣的了片效,我這是有多愛種綠植啊,只可惜買不起...
    雁南飛fly閱讀 529評論 20 31