headers中有很多字段,這些字段都有可能會被對方服務(wù)器拿過來進(jìn)行判斷是否為爬蟲
- 反爬原理:爬蟲默認(rèn)情況下沒有User-Agent
- 解決方法:請求之前添加User-Agent即可;更好的方式是使用User-Agent池來解決(收集一堆User-Agent的方式,或者是隨機(jī)生成User-Agent)
?
2.2 通過referer字段或者是其他字段來反爬
- 反爬原理:爬蟲默認(rèn)情況下不會帶上referer字段
- 解決方法:添加referer字段(例如豆瓣美劇爬蟲,詳見課程1.3.2小節(jié))
2.3 通過cookie來反爬
- 如果目標(biāo)網(wǎng)站不需要登錄 每次請求帶上前一次返回的cookie,比如requests模塊的session
- 如果目標(biāo)網(wǎng)站需要登錄 準(zhǔn)備多個賬號,通過一個程序獲取賬號對應(yīng)的cookie,組成cookie池,其他程序使用這些cookie
?
3 通過js來反爬
普通的爬蟲默認(rèn)情況下無法執(zhí)行js,獲取js執(zhí)行之后的結(jié)果,所以很多時候?qū)Ψ椒?wù)器會通過js的技術(shù)實(shí)現(xiàn)反爬
3.1 通過js實(shí)現(xiàn)跳轉(zhuǎn)來反爬
- 反爬原理:js實(shí)現(xiàn)頁面跳轉(zhuǎn),肉眼不可見
- 解決方法: 在chrome中點(diǎn)擊perserve log按鈕實(shí)現(xiàn)觀察頁面跳轉(zhuǎn)情況
在這些請求中,如果請求數(shù)量很多,一般來講,只有那些response中帶cookie字段的請求是有用的,意味著通過這個請求,對方服務(wù)器有設(shè)置cookie到本地
3.2 通過js生成了請求參數(shù)
- 反爬原理:js生成了請求參數(shù)
- 解決方法:分析js,觀察加密的實(shí)現(xiàn)過程,通過js2py獲取js的執(zhí)行結(jié)果,或者使用selenium來實(shí)現(xiàn)
3.3 通過js實(shí)現(xiàn)了數(shù)據(jù)的加密
- 反爬原理:js實(shí)現(xiàn)了數(shù)據(jù)的加密
- 解決方法:分析js,觀察加密的實(shí)現(xiàn)過程,通過js2py獲取js的執(zhí)行結(jié)果,或者使用selenium來實(shí)現(xiàn)
?
4 通過驗(yàn)證碼來反爬
- 反爬原理:對方服務(wù)器通過彈出驗(yàn)證碼強(qiáng)制驗(yàn)證用戶瀏覽行為
- 解決方法:打碼平臺或者是機(jī)器學(xué)習(xí)的方法識別驗(yàn)證碼,其中打碼平臺廉價易用,更值得推薦
5 通過ip地址來反爬
- 反爬原理:正常瀏覽器請求網(wǎng)站,速度不會太快,同一個ip大量請求了對方服務(wù)器,有更大的可能性會被識別為爬蟲
- 解決方法:對應(yīng)的通過購買高質(zhì)量的ip的方式能夠解決問題
6 通過用戶行為來反爬
- 反爬原理:通過瀏覽器請求數(shù)據(jù),很多用戶行為會在瀏覽器中是很容易實(shí)現(xiàn)或者無法實(shí)現(xiàn).比如瀏覽器請求額外的圖片地址,服務(wù)端進(jìn)行記錄,出現(xiàn)意味著不是爬蟲(爬蟲中不會主動請求圖片)
- 解決方法:通過獲取數(shù)據(jù)的情況來觀察請求,尋找異常出現(xiàn)的可能請求
7 其他的反爬方式
7.1 通過自定義字體來反爬
解決思路:切換到手機(jī)版
?
7.2 通過css來反爬
下圖來自貓眼去哪兒電腦版
解決思路:計算css的偏移
來源:https://www./content-4-609301.html
|