在網路抓取方面,大家經常會討論兩個問題:一個是如何避免被目標伺服器封鎖,另一個則是如何提升檢索資料的品質。在現有階段來說,有效的技術可以防止被目標網站封鎖,例如用戶常用的代理程式和實用的IP位址輪調。不過其實還有一項技術也能發揮類似作用,卻常被忽略,那就是使用和優化HTTP標頭。這種方法同樣能夠降低的網路爬蟲被各種資料來源封鎖的可能性,並確保檢索到高品質的資料。接下來就來了解常用的五種標頭:
HTTP Header User-Agent
User-Agent Header傳遞的訊息包括應用程式類型,作業系統,軟體和版本訊息,並允許資料目標來決定使用何種類型的HTML佈局來回應,手機、平板電腦或PC皆可顯示不同的HTML佈局。
網路伺服器經常會驗證User-Agent Header,這是網站伺服器的第一重保障,這個步驟可以讓資料來源識別出可疑請求,因此,有經驗的爬蟲工作者會把User-Agent Header修改成不同的字符串,從而讓伺服器識別成是多個自然用戶在發出請求。
HTTP Header Accept-Language
Accept-Language Header傳遞給網頁伺服器的訊息包含用戶端有哪些語言,以及網路伺服器傳迴回應時首選哪種特定語言。當網頁伺服器無法辨識首選語言時,通常會使用特定Header。
HTTP Header Accept-Encoding
Accept-Encoding Header通知網頁伺服器在處理請求時使用哪種壓縮演算法。換句話說,當從網頁伺服器傳送到客戶端時,如果伺服器可以處理,就會確認可以壓縮的資訊。使用該Header優化後它可以節省流量,從流量負載的角度來看,這對客戶端和網路伺服器來說都比較好。
HTTP Header Accept
Accept Header屬於內容協商類別,其目的是通知網頁伺服器可以向客戶端傳回哪種類型的資料格式。如果Accept Header配置得當,就會讓客戶端和伺服器之間的通訊更像真實使用者行為,從而減少網路爬蟲被封鎖的可能性。
HTTP Header Referer
在將請求傳送到網頁伺服器之前,Referer Header會提供請求前使用者所在的網頁位址。在網站試圖阻止抓取過程時,Referer Header其實影響不大。一個隨機的真實使用者很可能上網時間間隔數小時。