iT邦幫忙

2022 iThome 鐵人賽

DAY 29
0
自我挑戰組

養爬蟲的人學爬蟲系列 第 29

【Day 29】反爬蟲技術初步認識

  • 分享至 

  • xImage
  •  

閒聊
昨天初步對反爬蟲的概念跟常見的樣式有點認識後,今天想來試著練習一點反爬蟲的技術。

驗證碼Captcha
目前最常見的反爬蟲就是驗證碼方式,這裡會分為圖片辨識跟輸入驗證碼兩種。
圖片辨識在昨天有說明過,利用使用者的人為動作,去判斷是否為機器人。
https://ithelp.ithome.com.tw/upload/images/20221012/20145359hULpNREQHe.png

輸入驗證碼有分為是否區分大小寫。(如下圖所示)
https://ithelp.ithome.com.tw/upload/images/20221012/20145359cIFziAbfV8.png

應對驗證碼
這邊有幾種方式可以應對驗證碼:

  • 人工輸入驗證碼
    這個方法是最簡單的,只需要在程式中用類似 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後,就可以達到自動登錄的效果,自然就也不用驗證碼了。

反爬蟲技術

  • Request Headers檢查
    有時候被扒取的網站會檢測出目前請求的Request Headers,這時候在Request Headers加入自己在瀏覽器
    上擷取的User-Agent。
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的timesleep來達到效果。

  • 資料載入檢查
    這時候會看網頁資料載入、渲染的狀況,可以使用Requests-HTML或是Selenium來渲染畫面,達到模擬使用者的情形。

結語
今天稍微認識了反爬蟲的技術,感覺還有很多值得去學習的事情!
明天就是最後一天了,再撐一下下吧。/images/emoticon/emoticon07.gif

明天!
【Day 30】終於完賽啦!這30天以來的感想

參考資料
Day26-聽過OCR嗎?實作看看吧 -- pytesseracthttps://ithelp.ithome.com.tw/articles/10227263


上一篇
【Day 28】什麼是反爬蟲?
下一篇
【Day 30】終於完賽啦!這30天以來的感想
系列文
養爬蟲的人學爬蟲30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言