我們在爬蟲作業的時候,經常會遇到HTTP返回錯誤程式碼,那這些錯誤程式碼代表了什麼意思呢?爬蟲作業的時候又該如何避免這些問題,高效完成我們的專案?
1.403 Forbidden
這個狀態碼錶示伺服器理解客戶端的請求,但是拒絕提供服務。這通常是因為伺服器已經檢測到了惡意爬蟲,並已經禁止了其訪問。
2.404 未找到
這個狀態碼錶示伺服器無法找到客戶端請求的資源。雖然這通常不是針對爬蟲的禁止,但它可能是由於爬蟲訪問了一個不存在的頁面或被網站管理員刪除的頁面。
3.418 I'm a teapot
雖然這個狀態碼實際上是作為一個玩笑而出現的,但它也被用來表示伺服器拒絕提供服務。這可能是因為伺服器檢測到了惡意爬蟲或其他異常訪問。
4.429 太多的請求
這個狀態碼錶示客戶端傳送的請求太頻繁了。這通常是因為伺服器已經檢測到了過度使用的爬蟲,並已經限制了其訪問速率。
5.503 Service Unavailable
這個狀態碼錶示伺服器目前無法處理客戶端的請求。這可能是由於伺服器過載、維護或其他原因導致的,但也可能是伺服器禁止了爬蟲的訪問。
那我們在爬蟲作業的時候,要提前準備什麼,來讓我們的專案進展順利呢?
1.robots.txt檔案
在進行網站爬取之前,我們需要了解目標網站是否允許爬蟲訪問,以避免違反網站協議。每個網站都有一個robots.txt檔案,用於告訴搜尋引擎和其他爬蟲哪些頁面可以訪問,哪些頁面不能訪問。因此,在開始爬取網站之前,我們需要檢查這部分的檔案,確保自己需要的資料在可訪問的範圍呢。
2.User-Agent
在爬蟲中設定 User-Agent 可以模擬不同的瀏覽器來訪問網站,以避免被網站識別為爬蟲並阻止訪問。通常情況下,User-Agent可以設定為任何一個瀏覽器的標識字串,我們需要在請求頭中新增 User-Agent 欄位,方法如下:
Python requestsku:
import requests headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36' } response = requests.get(url, headers=headers)
在上面的程式碼中,User-Agent 的值設定為 Chrome 瀏覽器的標識字串。也可以根據需要更改它以模擬其他瀏覽器。
3.模擬行為
網站管理員通常會監視網站上的異常活動,如高速連續訪問,所以我們需要儘可能地模擬正常使用者的訪問。為此,我們可以使用隨機等待時間和隨機的點選行為,可以隨機地在網站上瀏覽不同的頁面,或者在請求之間隨機地停留一段時間,以模擬使用者的行為。
4.適合自己的爬蟲工具
磨刀不誤砍柴工,在進行網站爬取之前,我們需要選擇一個適合自己的爬蟲工具。一些常用的爬蟲工具包括Python中的Beautiful Soup和Scrapy,Node.js中的Cheerio和Puppeteer,Java中的Jsoup和Webmagic等。舉個例子,如果我們需要一個非常靈活的爬蟲工具,可以考慮使用Scrapy。如果需要一個簡單而功能強大的HTML解析器,可以使用Beautiful Soup。如果需要使用JavaScript進行網站爬取,可以考慮使用Puppeteer。
5.使用多執行緒
使用多執行緒可以大大提高網站爬取的效率。在進行網站爬取時,我們可以使用多個執行緒同時傳送請求,這樣可以更快地獲取所需的資料。然而,在使用多執行緒時,我們需要注意執行緒數量的控制,避免過多的執行緒導致伺服器負載過高而影響正常的網站服務。另外,在多執行緒爬取時,我們還需要注意執行緒之間的同步和資料共享問題,以確保資料的準確性和完整性。
6.使用代理
有些網站可能會對來自同一地址的高頻請求進行限制,因此我們可以使用HTTP代理來分散請求。但,問題來了,又的HTTP代理提供的節點可選範圍很小,或者為了介於成本,提供的節點只在某一些特定的偏遠地區,或者乾脆可用率極低,使用起來非常不方便,我們要如何在一眾廠商中挑選到適合我們的呢?
這裡我會比較推薦青果網路的HTTP代理。無論是從結果來看:
(併發)
(隧道成功率)
而且他們家的產品價格也很實誠,不像有的廠商價格高到離譜:
近期看他們還開發了企業池,看介紹是由日去重達到220+W。
這時候,就有人要說啦,哎呀我看人家都是說千萬IP的。怎麼說呢,也看看我們自己的業務體量對吧,不是越大越好,羊毛總是出在羊身上。