閒聊
昨天初步對反爬蟲的概念跟常見的樣式有點認識後,今天想來試著練習一點反爬蟲的技術。
驗證碼Captcha
目前最常見的反爬蟲就是驗證碼方式,這裡會分為圖片辨識跟輸入驗證碼兩種。
圖片辨識在昨天有說明過,利用使用者的人為動作,去判斷是否為機器人。
輸入驗證碼有分為是否區分大小寫。(如下圖所示)
應對驗證碼
這邊有幾種方式可以應對驗證碼:
人工輸入驗證碼
這個方法是最簡單的,只需要在程式中用類似 input()
的步驟暫停住,把圖片下載下來。接下來人工輸入驗證碼,就可以繼續爬娶了。
模擬人類動作(reCAPTCHA)
這個方法常用於Selenium爬取時遇到reCAPTCHA,通常會需要渲染網頁JavaScript,或是在網頁停留、捲動一段時間,然後點擊「我不是機器人」。
OCR辨識驗證碼
這個方法主要是將驗證碼的圖片用OCR文字辨識,在Python最常使用的OCR是pytesseract
。
pip install pillow
pip install pytesseract
需要注意的是,pytesseract還需要下載Tesseract執行檔,在Python執行的時候,需要指定路徑。
下載處:https://github.com/UB-Mannheim/tesseract/wiki
from PTL import Image
import pytesseract
if __name__ == '__main__':
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
img = Image.open('img.png')
text = pytesseract.image_to_string(img)
print(text)
第三方平台驗證碼服務
第三方平台提供的服務基本上是需要付費,可以依照個人需求去選擇。
User Session
先用瀏覽器登錄後,之後將Session匯出。
讓爬蟲帶著Session後,就可以達到自動登錄的效果,自然就也不用驗證碼了。
反爬蟲技術
url = 'https://www.google.com.tw/'
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'
resp = requests.get(url, headers={
'user-agent': user_agent
})
使用者操作檢查
有些網站會檢查使用者的操作,例如查看向網頁請求的來源IP的頻率、次數以及查看網頁停留時間、渲染狀況...等。
那這裡可以有兩種解決方法:
1.每次請求都使用不同的proxy,這個在網路上搜尋「free proxy list」都能找到不少免費資源。
2.在每次發送請求後,休息一段時間。這個可以透過Python的time
、sleep
來達到效果。
資料載入檢查
這時候會看網頁資料載入、渲染的狀況,可以使用Requests-HTML或是Selenium來渲染畫面,達到模擬使用者的情形。
結語
今天稍微認識了反爬蟲的技術,感覺還有很多值得去學習的事情!
明天就是最後一天了,再撐一下下吧。
明天!
【Day 30】終於完賽啦!這30天以來的感想
參考資料
Day26-聽過OCR嗎?實作看看吧 -- pytesseracthttps://ithelp.ithome.com.tw/articles/10227263