喜歡爬蟲的伙伴都知道,在爬網站的內容的時候并不是一爬就可以了,有時候就會遇到一些網站的反爬蟲,折回讓你爬不到數據,給你返回一些404,403或者500的狀態碼,這有時候會讓人苦不堪言,就如我昨天發的爬網易云音樂評論,在你爬的數據較多時,網站認為你是一個機器,就不讓你爬了,網易云就給我返回了一個{"code":-460,"msg":"Cheating"},你不看下他的返回內容還不知道自己被反爬蟲,不過不用擔心,既然網頁有反爬蟲,可我們也有反反爬蟲,今天就給大家說說反爬蟲與反反爬蟲。
1).網頁的反爬蟲
1.通過網頁的請求頭
首先我們先看看網易云音樂評論的請求頭
User-Agent:這個是保存用戶訪問該網站的瀏覽器的信息,我上面這個表示的是我通過window的瀏覽器來訪問這個網站的,如果你是用python來直接請求這個網站的時候,這個的信息會帶有python的字眼,所以網站管理員可以通過這個來進行反爬蟲。
Referer:當瀏覽器發送請求時,一般都會帶上這個,這個可以讓網站管理者知道我是通過哪個鏈接訪問到這個網站的,上面就說明我是從網易云音樂的主頁來訪問到這個頁面的,若你是用python來直接請求是,就沒有訪問來源,那么管理者就輕而易舉地判斷你是機器在操作。
authorization:有的網站還會有這個請求頭,這個是在用戶在訪問該網站的時候就會分配一個id給用戶,然后在后臺驗證該id有沒有訪問權限從而來進行發爬蟲。
2.用戶訪問網站的ip
當你這個ip在不斷地訪問一個網站來獲取數據時,網頁后臺也會判斷你是一個機器。就比如我昨天爬的網易云音樂評論,我剛開始爬的一首《海闊天空》時,因為評論較少,所以我容易就得到所有數據,但是當我選擇爬一首較多評論的《等你下課》時,在我爬到800多頁的時候我就爬不了,這是因為你這個ip的用戶在不斷地訪問這個網站,他已經把你視為機器,所以就爬不了,暫時把你的ip給封了。
2).我們的反反爬蟲
1.添加請求頭
既然在請求網頁的時候需要請求頭,那么我們只需要在post或者get的時候把我們的請求頭加上就可以了,怎樣加?可以使用requests庫來添加,在post,get或者其他方法是加上headers參數就可以了,而請求頭不需要復制所有的信息,只需要上面的三個之中一個就可以,至于哪個自己判斷,或者直接添加所有也可以,這樣我們就可以繼續爬了。
2.使用代理ip
若是網站把你的ip給封了,你添加什么的請求頭也都沒有用了,那我們就只有等他解封我們才可以繼續爬嗎?我可以十分自信告訴你:不需要,我們可以使用代理ip來繼續爬,我們可以爬取網絡上的免費ip來爬,至于免費的代理ip質量怎樣你們應該知道,有必要可以買些不免費的,這樣好點,我們平時的練習用免費的代理ip就可以了,可以自己爬取一些免費代理ip建成ip池,然后爬的時候就把ip隨機取出來,我偷偷告訴你:小編明天的文章就是教你怎樣搭建自己的代理ip池。
END
結束語:上面的只是個人在爬一些網站時候遇到的一些反爬蟲,這只是很簡單的,還有那些動態網站的反爬蟲自己還沒有接觸,等到以后接觸了,再一 一補充。最后給大家在爬蟲上的建議,就是爬取速度不要太快,最好每幾個就隔幾秒,不要給服務器造成太大的壓力,也可以在爬蟲的時候選擇一些訪問量少點的時間段,這是對服務器好,也是對你自己好!