常見的反爬手段和解決思路
反反爬的主要思路
反反爬的主要思路就是:盡可能的去模擬瀏覽器,瀏覽器在如何操作,代碼中就如何去實現。瀏覽器先請求了地址url1,保留了cookie在本地,之后請求地址url2,帶上了之前的cookie,代碼中也可以這樣去實現。
很多時候,爬蟲中攜帶的headers字段,cookie字段,url參數,post的參數很多,不清楚哪些有用,哪些沒用的情況下,只能夠去嘗試,因為每個網站都是不相同的。當然在盲目嘗試之前,可以參考別人的思路,我們自己也應該有一套嘗試的流程。
1. 通過headers字段來反爬
1.1 通過headers中的User-Agent字段來反爬
通過User-Agent字段反爬的話,只需要給他在請求之前添加User-Agent即可,更好的方式是使用User-Agent池來解決,我們可以考慮收集一堆User-Agent的方式,或者是隨機生成User-Agen
1.2 通過referer字段或者是其他字段來反爬
通過referer字段來反爬,我們只需要添加上即可
1.3 通過cookie來反爬
-
如果目標網站不需要登錄 每次請求帶上前一次返回的cookie,比如requests模塊的session
-
如果目標網站需要登錄 准備多個賬號,通過一個程序獲取賬號對應的cookie,組成cookie池,其他程序使用這些cookie
2.通過js來反爬
2.1 通過js實現跳轉來反爬
在請求目標網站的時候,我們看到的似乎就請求了一個網站,然而實際上在成功請求目標網站之前,中間可能有通過js實現的跳轉,我們肉眼不可見,這個時候可以通過點擊perserve log按鈕實現觀察頁面跳轉情況
在這些請求中,如果請求數量很多,一般來講,只有那些response中帶cookie字段的請求是有用的,意味着通過這個請求,對方服務器有設置cookie到本地
2.2 通過js生成了請求參數
對應的需要分析js,觀察加密的實現過程
可以使用selenium模塊解決
3.3 通過js實現了數據的加密
對應的需要分析js,觀察加密的實現過程,也是使用selenium模塊實現
3. 通過驗證碼來反爬
通過打碼平台或者是機器學習的方法識別驗證碼,其中打碼平台廉價易用,建議使用
4. 通過ip地址來反爬
同一個ip大量請求了對方服務器,有更大的可能性會被識別為爬蟲,對應的通過購買高質量的ip的方式能夠解決
5. 其他的反爬方式
6.1 通過自定義字體來反爬
解決思路:可以嘗試切換到手機版試試
6.2 通過css來反爬
如通過css掩蓋真實數據
解決思路:計算css的偏量