網(wǎng)頁抓取五種常用的HTTP標(biāo)頭
在網(wǎng)絡(luò)抓取方面,大家經(jīng)常會(huì)討論兩個(gè)問題:一個(gè)是如何避免被目標(biāo)服務(wù)器封鎖,另一個(gè)則是如何提高檢索數(shù)據(jù)的質(zhì)量。在現(xiàn)有階段來說,有效的技術(shù)可以防止被目標(biāo)網(wǎng)站封鎖,例如用戶們常用的代理和實(shí)用的IP地址輪換。不過其實(shí)還有一項(xiàng)技術(shù)也能發(fā)揮類似作用,卻經(jīng)常被忽略,那就是使用和優(yōu)化HTTP標(biāo)頭。這種方法同樣能夠降低的網(wǎng)絡(luò)爬蟲被各種數(shù)據(jù)源封鎖的可能性,并確保檢索到高質(zhì)量的數(shù)據(jù)。接下來就來了解一下常用的五種標(biāo)頭:
HTTP Header User-Agent
User-Agent Header傳遞的信息包括應(yīng)用類型,操作系統(tǒng),軟件和版本信息,并允許數(shù)據(jù)目標(biāo)來決定使用何種類型的HTML布局來響應(yīng),手機(jī)、平板電腦或PC均可顯示不同的HTML布局。
網(wǎng)絡(luò)服務(wù)器經(jīng)常會(huì)驗(yàn)證User-Agent Header,這是網(wǎng)站服務(wù)器的第一重保障,這個(gè)步驟可以讓數(shù)據(jù)源識(shí)別出可疑請(qǐng)求,因此,有經(jīng)驗(yàn)的爬蟲工作者會(huì)把User-Agent Header修改成不同的字符串,從而讓服務(wù)器識(shí)別成是多個(gè)自然用戶在發(fā)出請(qǐng)求。
HTTP Header Accept-Language
Accept-Language Header向網(wǎng)絡(luò)服務(wù)器傳遞的信息包含客戶端有哪些語言,以及當(dāng)網(wǎng)絡(luò)服務(wù)器發(fā)回響應(yīng)時(shí)首選哪種特定語言。當(dāng)網(wǎng)絡(luò)服務(wù)器無法識(shí)別首選語言時(shí),通常會(huì)使用特定Header。
HTTP Header Accept-Encoding
Accept-Encoding Header通知網(wǎng)絡(luò)服務(wù)器在處理請(qǐng)求時(shí)使用哪種壓縮算法。換句話說,當(dāng)從網(wǎng)絡(luò)服務(wù)器發(fā)送到客戶端時(shí),如果服務(wù)器可以處理,就會(huì)確認(rèn)可以壓縮的信息。使用該Header優(yōu)化后它可以節(jié)省流量,從流量負(fù)載的角度來看,這對(duì)客戶端和網(wǎng)絡(luò)服務(wù)器來說都比較好。
HTTP Header Accept
Accept Header屬于內(nèi)容協(xié)商類別,其目的是通知網(wǎng)絡(luò)服務(wù)器可以向客戶端返回什么類型的數(shù)據(jù)格式。如果Accept Header配置得當(dāng),就會(huì)讓客戶端和服務(wù)器之間的通信更加像真實(shí)用戶行為,從而減少網(wǎng)絡(luò)爬蟲被封鎖的可能性。
HTTP Header Referer
在將請(qǐng)求發(fā)送到網(wǎng)絡(luò)服務(wù)器之前,Referer Header會(huì)提供請(qǐng)求前用戶所在的網(wǎng)頁地址。在網(wǎng)站試圖阻止抓取過程時(shí),Referer Header其實(shí)影響不大。一個(gè)隨機(jī)的真實(shí)用戶很可能上網(wǎng)時(shí)間間隔數(shù)小時(shí)。