最近有點(diǎn)時(shí)間在玩爬蟲(chóng),看到網(wǎng)上很多喜歡的照片饲宿、電源以及圖書(shū)等資源,心想能不能通過(guò)所學(xué)的Python技術(shù)把它給拿下來(lái)并保存在文件夾中胆描,網(wǎng)上找了一下資料瘫想。發(fā)現(xiàn),可以通過(guò)網(wǎng)絡(luò)爬蟲(chóng)技術(shù)將網(wǎng)絡(luò)上的資源下載下來(lái)昌讲,爬蟲(chóng)之路即將開(kāi)始国夜,現(xiàn)將手記做下記錄。
一短绸、網(wǎng)絡(luò)爬蟲(chóng)的定義
網(wǎng)絡(luò)爬蟲(chóng)车吹,即Web Spider,是一個(gè)很形象的名字醋闭。
把互聯(lián)網(wǎng)比喻成一個(gè)蜘蛛網(wǎng)窄驹,那么Spider就是在網(wǎng)上爬來(lái)爬去的蜘蛛。網(wǎng)絡(luò)蜘蛛是通過(guò)網(wǎng)頁(yè)的鏈接地址來(lái)尋找網(wǎng)頁(yè)的证逻。從網(wǎng)站某一個(gè)頁(yè)面(通常是首頁(yè))開(kāi)始乐埠,讀取網(wǎng)頁(yè)的內(nèi)容,找到在網(wǎng)頁(yè)中的其它鏈接地址囚企,然后通過(guò)這些鏈接地址尋找下一個(gè)網(wǎng)頁(yè)丈咐,這樣一直循環(huán)下去,直到把這個(gè)網(wǎng)站所有的網(wǎng)頁(yè)都抓取完為止龙宏。如果把整個(gè)互聯(lián)網(wǎng)當(dāng)成一個(gè)網(wǎng)站棵逊,那么網(wǎng)絡(luò)蜘蛛就可以用這個(gè)原理把互聯(lián)網(wǎng)上所有的網(wǎng)頁(yè)都抓取下來(lái)。這樣看來(lái)银酗,網(wǎng)絡(luò)爬蟲(chóng)就是一個(gè)爬行程序歹河,一個(gè)抓取網(wǎng)頁(yè)的程序。網(wǎng)絡(luò)爬蟲(chóng)的基本操作是抓取網(wǎng)頁(yè)花吟。那么如何才能隨心所欲地獲得自己想要的頁(yè)面秸歧?我們得從URL入手開(kāi)始。
二衅澈、URL的理解和舉例
URL是URI的一個(gè)子集键菱。它是Uniform Resource Locator的縮寫(xiě),譯為“統(tǒng)一資源定位 符”。通俗地說(shuō)经备,URL是Internet上描述信息資源的字符串拭抬,主要用在各種WWW客戶程序和服務(wù)器程序上。采用URL可以用一種統(tǒng)一的格式來(lái)描述各種信息資源侵蒙,包括文件造虎、服務(wù)器的地址和目錄等。URL的一般格式為(帶方括號(hào)[]的為可選項(xiàng)):
protocol :// hostname[:port] / path / [;parameters][?query]#fragment
URL的格式由三部分組成:?
①第一部分是協(xié)議(或稱為服務(wù)方式)纷闺。
②第二部分是存有該資源的主機(jī)IP地址(有時(shí)也包括端口號(hào))算凿。
③第三部分是主機(jī)資源的具體地址,如目錄和文件名等犁功。
第一部分和第二部分用“://”符號(hào)隔開(kāi)氓轰,
第二部分和第三部分用“/”符號(hào)隔開(kāi)。
第一部分和第二部分是不可缺少的浸卦,第三部分有時(shí)可以省略署鸡。
三、URI和URL的概念和舉例
簡(jiǎn)單的來(lái)講限嫌,URL就是在瀏覽器端輸入的 ? ?http://www.baidu.com ? ?這個(gè)字符串靴庆。在理解URL之前,首先要理解URI的概念怒医。什么是URI炉抒?Web上每種可用的資源,如 HTML文檔裆熙、圖像端礼、視頻片段、程序等都由一個(gè)通用資源標(biāo)志符(Universal Resource Identifier入录, URI)進(jìn)行定位蛤奥。 URI通常由三部分組成:
①訪問(wèn)資源的命名機(jī)制;
②存放資源的主機(jī)名僚稿;
③資源自身 的名稱凡桥,由路徑表示。
如后面的URI:http://www.why.com.cn/myhtml/html1223/
我們可以這樣解釋它:
①這是一個(gè)可以通過(guò)HTTP協(xié)議訪問(wèn)的資源蚀同,
②位于主機(jī) www.why.com.cn上缅刽,
③通過(guò)路徑“/html/html1223”訪問(wèn)。
四蠢络、URL和URI簡(jiǎn)單比較
URI屬于URL更低層次的抽象衰猛,一種字符串文本標(biāo)準(zhǔn)。換句話說(shuō)刹孔,URI屬于父類啡省,而URL屬于URI的子類。URL是URI的一個(gè)子集。
URI的定義是:統(tǒng)一資源標(biāo)識(shí)符卦睹;
URL的定義是:統(tǒng)一資源定位符畦戒。
二者的區(qū)別在于,URI表示請(qǐng)求服務(wù)器的路徑结序,定義這么一個(gè)資源障斋。而URL同時(shí)說(shuō)明要如何訪問(wèn)這個(gè)資源(http://)。
五徐鹤、瀏覽網(wǎng)頁(yè)的過(guò)程
抓取網(wǎng)頁(yè)的過(guò)程其實(shí)和讀者平時(shí)使用IE瀏覽器瀏覽網(wǎng)頁(yè)的道理是一樣的垃环。比如說(shuō)你在瀏覽器的地址欄中輸入 ? ?www.baidu.com ? ?這個(gè)地址。打開(kāi)網(wǎng)頁(yè)的過(guò)程其實(shí)就是瀏覽器作為一個(gè)瀏覽的“客戶端”凳干,向服務(wù)器端發(fā)送了 一次請(qǐng)求晴裹,把服務(wù)器端的文件“抓”到本地被济,再進(jìn)行解釋救赐、展現(xiàn)。HTML是一種標(biāo)記語(yǔ)言只磷,用標(biāo)簽標(biāo)記內(nèi)容并加以解析和區(qū)分经磅。瀏覽器的功能是將獲取到的HTML代碼進(jìn)行解析,然后將原始的代碼轉(zhuǎn)變成我們直接看到的網(wǎng)站頁(yè)面钮追。
爬蟲(chóng)最主要的處理對(duì)象就是URL预厌,它根據(jù)URL地址取得所需要的文件內(nèi)容,然后對(duì)爬取的數(shù)據(jù)進(jìn)行進(jìn)一步的處理元媚。因此轧叽,準(zhǔn)確地理解URL對(duì)理解網(wǎng)絡(luò)爬蟲(chóng)至關(guān)重要。