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