1、判斷請求頭來進行反爬
這是很早期的網站進行的反爬方式
解決辦法:請求頭裡面添加對應的參數(複製瀏覽器裡面的數據)
2、根據用戶行為來進行反爬
3、js加密
反爬方式中較為難處理的一類。
js加密的原理:伺服器響應給瀏覽器的js文件,可以動態的生成一些加密參數,瀏覽器會根據js的計算 得到這些參數,在請求中帶入進來,如果請求中沒有這些參數,那麼伺服器就任務請求無效。
4、字體加密
字體反爬,是一種常見的反爬技術,網站採用了自定義的字體文件,在瀏覽器上正常顯示,但是爬蟲抓取下來的數據要麼就是亂碼,要麼就是變成其他字符。採用自定義字體文件是CSS3的新特性,熟悉前端的同學可能知道,就是font-face屬性。
5、登錄驗證碼
使用Python爬取網頁內容時往往會遇到使用驗證碼登陸才能訪問其網站,不同網站的使用的驗證碼也不同,在最開始使用簡單驗證碼,識別數字,但是隨著反爬的不斷發展,慢慢設計出了更多複雜的驗證碼,比如:內容驗證碼、滑動驗證碼、圖片拼接驗證碼等等。
網上有很多打碼平臺,通過註冊帳號,調用平臺接口,進行驗證碼的驗證。
6、md5相關知識
MD5,消息摘要算法,一種被廣泛使用的密碼散列函數,可以產生出一個128位(16位元組)的散列值(hash value),用於確保信息傳輸完整一致。MD5是最常見的摘要算法,速度很快,生成結果是固定的128 bit字節,通常用一個32位的16進位字符串表示。MD5的特點:
1.不可逆:不能從密文推導出明文。
2.不管明文長度為多少,密文的長度都固定。
3.密文之間不會重複。
import hashlibprint(hashlib.md5(&39;.encode()).hexdigest())
字符串python加密後的結果:
23eeeb4347bdd26bfc6b7ee9a3b755dd
7、base64
Base64是網絡上最常見的用於傳輸8Bit字節碼的編碼方式之一,Base64就是一種基於64個可列印字符來表示二進位數據的方法。Base64編碼是從二進位到字符的過程,可用於在HTTP環境下傳遞較長的標識信息。採用Base64編碼具有不可讀性,需要解碼後才能閱讀。
import base6439;python&python中base64的解密print(base64.b64decode(&39;.encode()).decode())
結果:
cHl0aG9u
china
自己動手看驗證碼(古詩詞網)
import requestsurl = &34;session = requests.Session()text = session.get(url).text 下載驗證碼圖片,保存with open(&39;, &39;)as f: f.write(&39;.encode())code = input(&39;)login_url = &34;data = { &34;: &39;, &34;: &39;, &34;: code}requests.post(url, data=data)
使用打碼平臺(圖鑑)
新建一個captcha_api.py
import jsonimport requestsimport base64from io import BytesIOfrom PIL import Imagefrom sys import version_infodef base64_api(uname, pwd, img): img = img.convert(&39;) buffered = BytesIO() img.save(buffered, format=&34;) if version_info.major >= 3: b64 = str(base64.b64encode(buffered.getvalue()), encoding=&39;) else: b64 = str(base64.b64encode(buffered.getvalue())) data = {&34;: uname, &34;: pwd, &34;: b64} result = json.loads(requests.post(&34;, json=data).text) if result[&39;]: return result[&34;][&34;] else: return result[&34;] return &34;def request_captcha(uname, pwd, img_path): img_path = img_path 傳入帳號 密碼 和圖片 print(result)
新建use_code.py,調用接口
img_path = &39;from captcha_api import request_captcharet = request_captcha(&34;, &34;, img_path)