我們可以把互聯(lián)網(wǎng)比作一張大網(wǎng),而爬蟲(chóng)(網(wǎng)絡(luò)爬蟲(chóng))就是在網(wǎng)上爬行的蜘蛛。網(wǎng)絡(luò)的節(jié)點(diǎn)被比作一個(gè)網(wǎng)頁(yè),當(dāng)爬蟲(chóng)爬到它的時(shí)候,相當(dāng)于訪(fǎng)問(wèn)了這個(gè)網(wǎng)頁(yè),獲得了它的信息。節(jié)點(diǎn)之間的鏈接可以比作網(wǎng)頁(yè)之間的鏈接,這樣蜘蛛經(jīng)過(guò)一個(gè)節(jié)點(diǎn)后,就可以沿著節(jié)點(diǎn)鏈接繼續(xù)爬行,到達(dá)下一個(gè)節(jié)點(diǎn),也就是通過(guò)一個(gè)網(wǎng)頁(yè)繼續(xù)獲取后續(xù)的網(wǎng)頁(yè),這樣整個(gè)網(wǎng)絡(luò)的節(jié)點(diǎn)就可以被蜘蛛全部爬行到,網(wǎng)站的數(shù)據(jù)就可以被爬行下來(lái)。
簡(jiǎn)單來(lái)說(shuō),爬蟲(chóng)就是獲取網(wǎng)頁(yè)并提取和保存信息的自動(dòng)化程序。
1.獲取網(wǎng)頁(yè)
爬蟲(chóng)首先要做的工作就是獲取網(wǎng)頁(yè),就是獲取網(wǎng)頁(yè)的源代碼。源代碼李包含了網(wǎng)頁(yè)的部分有用信息,所以只要把源代碼獲取下來(lái),就可以從中提取到想要的信息了。
爬蟲(chóng)通過(guò)請(qǐng)求和響應(yīng)來(lái)獲取網(wǎng)頁(yè),向網(wǎng)站的服務(wù)器發(fā)送一個(gè)請(qǐng)求,返回的響應(yīng)體便是網(wǎng)頁(yè)源代碼。所以,最關(guān)鍵的部分就是構(gòu)造一個(gè)請(qǐng)求并發(fā)送給服務(wù)器,然后接受到響應(yīng)并將其解析出來(lái)。
2.提取信息獲取網(wǎng)頁(yè)源代碼后,接下來(lái)就是分析網(wǎng)頁(yè)源代碼,從中提取我們想要的數(shù)據(jù)。
由于網(wǎng)頁(yè)的結(jié)構(gòu)由一定的規(guī)則,所以可以根據(jù)一些網(wǎng)頁(yè)節(jié)點(diǎn)屬性、CSS選擇器或XPath來(lái)提取網(wǎng)頁(yè)信息的庫(kù)。
提取信息是爬蟲(chóng)非常重要的部分,它可以使雜亂的數(shù)據(jù)變得條理清晰,以便我們后續(xù)處理和分析。
3.保存數(shù)據(jù)提取信息后,我們一般會(huì)將提取到的數(shù)據(jù)保存到一些地方以便后續(xù)使用。這里保存形式多樣,可以簡(jiǎn)單保存為T(mén)XT文本或JSON文本,也可以保存到數(shù)據(jù)庫(kù),如Mysql,還可以保存到遠(yuǎn)程服務(wù)器。
爬蟲(chóng)可以“爬”到怎樣的數(shù)據(jù)
在網(wǎng)頁(yè)中我們能看到各種各樣的信息,最常見(jiàn)的便是常規(guī)網(wǎng)頁(yè),它們對(duì)應(yīng)著HTML代碼,而最常抓取的便是HTML源代碼。另外,可能有些網(wǎng)頁(yè)返回的數(shù)據(jù)不是HTML代碼,而是一個(gè)JSON字符串(其中API接口大多采用這樣的格式),這種格式的數(shù)據(jù)方便傳輸和解析,它們同樣可以抓取,而且數(shù)據(jù)提取更加方便。
?