爬蟲基本原理

我們可以把網(wǎng)路比作一張大網(wǎng)象泵,而爬蟲便是在網(wǎng)上爬行的蜘蛛文搂,可以把網(wǎng)的節(jié)點(diǎn)比作一個(gè)個(gè)網(wǎng)頁,爬蟲爬到這就相當(dāng)于訪問了該頁面獲取了信息,節(jié)點(diǎn)間的連線比作網(wǎng)頁與網(wǎng)頁間的鏈接土陪,這樣蜘蛛通過一個(gè)節(jié)點(diǎn)后可以順著節(jié)點(diǎn)連線繼續(xù)爬行到下一個(gè)節(jié)點(diǎn)昼汗,即通過一個(gè)網(wǎng)頁繼續(xù)獲取后續(xù)的網(wǎng)頁,這樣整個(gè)網(wǎng)頁的節(jié)點(diǎn)便可以被蜘蛛全部爬行鬼雀,這樣網(wǎng)站的數(shù)據(jù)就可以被抓去下來了顷窒。

1.爬蟲概述

爬蟲就是獲取網(wǎng)頁信息并提取和保存信息的自動(dòng)化程序,接下來對(duì)個(gè)點(diǎn)進(jìn)行說明:

獲取網(wǎng)頁

爬蟲的第一步工作是獲取網(wǎng)頁源哩,在這里獲取網(wǎng)頁就是獲取網(wǎng)頁的源代碼鞋吉,源代碼里包含網(wǎng)頁的部分有用信息,只要把源代碼獲取下來励烦,就可以從中提取我們想要的信息谓着。

獲取網(wǎng)頁源代碼的關(guān)鍵是構(gòu)造一個(gè)Request并發(fā)送給服務(wù)器,然后接收到Response并將其解析坛掠,我們可以使用Python中提供的庫來實(shí)現(xiàn)這個(gè)操作赊锚,如Urllib、Requests等屉栓,Request和Response都可以用類庫提供數(shù)據(jù)結(jié)構(gòu)來表示舷蒲,得到Response之后只需解析數(shù)據(jù)結(jié)構(gòu)中的Body部分即可,也就是網(wǎng)頁源代碼系瓢。

提取信息

在完成第一步獲取網(wǎng)頁源代碼后阿纤,接下來就是分析網(wǎng)頁源代碼,從中提取我們想要的數(shù)據(jù)夷陋,主要有兩種方法來提取信息:

第一種方法欠拾,通過正則表達(dá)式提取,這是一個(gè)萬能的方法骗绕,但在構(gòu)造正則表達(dá)式的時(shí)候比較復(fù)雜且容易出錯(cuò)藐窄。

第二種方法,網(wǎng)頁的結(jié)構(gòu)是有一定規(guī)則的酬土,所以有一些根據(jù)網(wǎng)頁節(jié)點(diǎn)屬性荆忍、CSS選擇器或XPath來提取網(wǎng)頁信息的庫,如BeautifulSoup撤缴、PyQuery刹枉、LXML等,使用這些庫可以高效快速地從網(wǎng)頁中提取信息屈呕,如節(jié)點(diǎn)的屬性微宝、文本值等內(nèi)容。


提取信息是爬蟲非常重要的部分虎眨,可以使雜亂的數(shù)據(jù)變得清晰條理蟋软,以便于我們后續(xù)對(duì)數(shù)據(jù)進(jìn)行處理和分析镶摘。

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

提取數(shù)據(jù)后我們一般會(huì)將提取到的數(shù)據(jù)保存在某處以便后續(xù)處理數(shù)據(jù)使用。保存形式有很多種岳守,可以簡單保存為TXT文本或Json文本凄敢,也可以保存到數(shù)據(jù)庫,如MySQL湿痢、MongoDB等涝缝,也可保存至遠(yuǎn)程服務(wù)器,如借助Sftp進(jìn)行操作等蒙袍。

自動(dòng)化程序

即爬蟲可以代替人來完成上述工作俊卤,我們可以手工提取這些信息,但當(dāng)量特別大或者想快速獲取大量數(shù)據(jù)的話就需要借助程序了害幅。爬蟲就是代替我們來完成這份爬取數(shù)據(jù)的工作的自動(dòng)化程序消恍,它可以在抓去過程中進(jìn)行各種異常處理、錯(cuò)誤重試等操作以现,確保爬取持續(xù)有效地運(yùn)行狠怨。

2.能抓取怎樣的數(shù)據(jù)

HTML源代碼,在網(wǎng)頁中可以看到各種各樣的信息邑遏,最常見的便是常規(guī)網(wǎng)頁诚亚,其都對(duì)應(yīng)著HTML代碼闹蒜。

Json字符串,有些網(wǎng)頁返回的不是HTML代碼,而是返回一個(gè)Json字符串帅霜,API接口大多采用這樣的方式薄声,方便數(shù)據(jù)的傳輸和解析荒勇,這種數(shù)據(jù)同樣可以抓取要糊,而且數(shù)據(jù)提取更加方便。

二進(jìn)制數(shù)據(jù)碾盟,網(wǎng)頁中還有各種二進(jìn)制數(shù)據(jù)棚辽,如圖片、視頻冰肴、音頻等屈藐,我們可以利用爬蟲將它們的二進(jìn)制數(shù)據(jù)抓取下來,然后保存對(duì)應(yīng)的文件名熙尉。

各種擴(kuò)展名的文件联逻,如CSS、JavaScript检痰、配置文件等包归,這些也是普通的文件,只要在瀏覽器里能訪問到就可以將其抓取下來攀细。

以上內(nèi)容都對(duì)應(yīng)著各自的URL箫踩,是基于HTTP或HTTPS協(xié)議的,只要是這種數(shù)據(jù)都可以進(jìn)行抓取谭贪。

3.JavaScript渲染頁面

有時(shí)在用Urllib或Requests抓取網(wǎng)頁時(shí)境钟,得到的源代碼和瀏覽器中看到的是不一樣的。

這是一個(gè)常見問題俭识,現(xiàn)在網(wǎng)頁越來越多采用Ajax慨削、前端模塊化工具來構(gòu)建頁面,整個(gè)網(wǎng)頁可能都是JavaScript渲染出來的套媚,意思就是說原始的HTML代碼就是一個(gè)空殼缚态。

對(duì)于一個(gè)使用JavaScript渲染出來的網(wǎng)頁,在使用Urllib或Requests等庫來請(qǐng)求頁面時(shí)堤瘤,得到的只是HTML代碼玫芦,它不會(huì)幫助我們繼續(xù)加載JavaScript文件,這樣也就看不到瀏覽器中的內(nèi)容了本辐。對(duì)于這種情況桥帆,我們可以分析其后臺(tái)Ajax接口,也可使用Selenium慎皱、Splash這樣的庫來實(shí)現(xiàn)JavaScript渲染老虫,這樣我們便可以爬取JavaScript渲染頁面的內(nèi)容。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末茫多,一起剝皮案震驚了整個(gè)濱河市祈匙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌天揖,老刑警劉巖夺欲,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異宝剖,居然都是意外死亡洁闰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門万细,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扑眉,“玉大人,你說我怎么就攤上這事赖钞⊙兀” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵雪营,是天一觀的道長弓千。 經(jīng)常有香客問我,道長献起,這世上最難降的妖魔是什么洋访? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任镣陕,我火速辦了婚禮,結(jié)果婚禮上姻政,老公的妹妹穿的比我還像新娘呆抑。我一直安慰自己,他們只是感情好汁展,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布鹊碍。 她就那樣靜靜地躺著,像睡著了一般食绿。 火紅的嫁衣襯著肌膚如雪侈咕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天器紧,我揣著相機(jī)與錄音耀销,去河邊找鬼。 笑死铲汪,一個(gè)胖子當(dāng)著我的面吹牛树姨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播桥状,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼帽揪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了辅斟?” 一聲冷哼從身側(cè)響起转晰,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎士飒,沒想到半個(gè)月后查邢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡酵幕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年扰藕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芳撒。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡邓深,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出笔刹,到底是詐尸還是另有隱情芥备,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布舌菜,位于F島的核電站萌壳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏袱瓮。R本人自食惡果不足惜缤骨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一尺借、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧褐望,春花似錦、人聲如沸串前。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谨读。三九已至,卻和暖如春劳殖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拨脉。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國打工哆姻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人玫膀。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓矛缨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親帖旨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 本文為自己動(dòng)手落竹,豐衣足食!Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)案例的學(xué)習(xí)筆記述召,部分圖片來源于視頻截圖蟹地。 爬蟲:請(qǐng)求網(wǎng)站桨武,并提...
    xuzhougeng閱讀 5,008評(píng)論 1 13
  • 爬蟲是什么 什么是互聯(lián)網(wǎng)锈津? 互聯(lián)網(wǎng)是由網(wǎng)絡(luò)設(shè)備(網(wǎng)線呀酸,路由器琼梆,交換機(jī)窿吩,防火墻等等)和一臺(tái)臺(tái)計(jì)算機(jī)連接而成错览,像一張網(wǎng)...
    馬小跳_閱讀 264評(píng)論 0 0
  • 33款可用來抓數(shù)據(jù)的開源爬蟲軟件工具 要玩大數(shù)據(jù),沒有數(shù)據(jù)怎么玩倾哺?這里推薦一些33款開源爬蟲軟件給大家。 爬蟲羞海,即...
    visiontry閱讀 7,318評(píng)論 1 99
  • 你爬了嗎? 要玩大數(shù)據(jù)却邓,沒有數(shù)據(jù)怎么玩?這里推薦一些33款開源爬蟲軟件給大家腊徙。 爬蟲,即網(wǎng)絡(luò)爬蟲撬腾,是一種自動(dòng)獲取網(wǎng)...
    Albert新榮閱讀 2,226評(píng)論 0 8
  • 1. 最近的熱播劇是《致我們單純的小美好》,改編自趙乾乾同名暢銷小說胶逢,主要講述了陳小希與江辰19年間共同成長,從青...
    文曉玲閱讀 235評(píng)論 6 7