# 破解反爬蟲技巧 ## 自我檢查 大多數網站都會有反爬的功能, 若是被擋住可以使用以下幾個網站確認哪些訊息讓你被辨識成爬蟲。 ### 檢測瀏覽器是否能被檢查為機器人 適用於 selenium 等自動化瀏覽器工具, browserscan 還有許多檢測工具可以自行檢測。 [browserscan-robot](https://www.browserscan.net/tc/bot-detection) ![image](https://hackmd.io/_uploads/BkYbm8ONkx.png) ### ip 偵測 針對會封鎖境外 ip、proxy ip、vpn 等的網站, 可以到以下網站確認自己可能被封鎖的原因。 [browserscan-ip](https://www.browserscan.net/tc/ipcheck) ![image](https://hackmd.io/_uploads/B1QHVL_Nkx.png) ## 攻防實錄 ### 擋境外 ip、proxy ip 以及 UA 檢測 目標網站 : https://www.wantgoo.com/investrue/0000/daily-candlestick ![image](https://hackmd.io/_uploads/SkXK_IdVye.png) 該網址可以取得每天的台股加權指數, 若是直接用瀏覽器開啟則可能會出現 ==400 - BadRequest==。 更不用說 requests 直接去 get 該 url, 或是 selenium 了。 該網站的檢測項目: 1. UA 檢測 : 也就是 Headers 的 UserAgent 訊息。 2. 境外 ip 阻擋 : 非臺灣 ip 都會被擋掉。 ==400 - BadRequest==。 3. proxy ip 檢測 : 若使用臺灣 proxy ip(ipv4、ipv6、home proxy) 都還是會被檢測出來 ==403 - BadRequest==。 解決方式 : #### UA 檢測 使用 fake_user_agent 套件產生 random UA 可以有效解決 UA 檢測。 ```python= from fake_useragent import UserAgent user_agent = UserAgent() response = requests.get(url,headers={'user-agent': user_agent.random}) ``` #### 擋境外 ip 境外 ip 阻擋, 若主機不在臺灣可以使用位於臺灣的 proxy ip 讓自己的 ip 來源看似為臺灣 ip [前往 ip2world 取得免費 proxy ip](https://www.ip2world.com/free_proxy/?utm-source=ggtg&utm-keyword=?4gfre293&gad_source=1&gclid=Cj0KCQiA0--6BhCBARIsADYqyL8AHVgbRDxesXl6UJS7Xp_9MfDMc6lxI38uXo2wrWvbVLGXr83WQeEaAiwGEALw_wcB) 該網站有免費的 ip, 但因為是多人共用較不穩定, 速度也會有影響, 可以到以下網站購買私人 ip [前往 proxy-seller 購買 proxy ip](https://proxy-seller.com/zh/personal/orders/) 2 個禮拜 1 個 ip 為 1.69 美金 ~= 55 NTD 在 python requests 中使用 proxy ```python= # 根據實際 ip 填入以下資料 proxy = { "http": "http://使用者名稱:使用者密碼@代理 ip:http port", "https": "http://使用者名稱:使用者密碼@代理 ip:http ports", } response = requests.get(url, headers={'user-agent': user_agent.random}, proxies=proxy) ``` #### proxy ip 檢測 :::warning 注意! 以下方法並非百分百破解所有網站 proxy ip 檢測, 僅供嘗試 ::: 提供 headers 的 `'X-Forwarded-For'` 參數為本機 ip --> `'127.0.0.1'`, 讓對方以為是自己發出的請求, 繞過 proxy ip 檢測。 ```python= response = requests.get(url, headers={'user-agent': user_agent.random, 'X-Forwarded-For': '127.0.0.1'}, proxies=proxy) ``` ## 防反爬蟲工具 使用 [scraperapi](https://www.scraperapi.com/) 繞過任何網站,需要訂閱後才能有 APIKEY。 - 高階反機器人繞過 - 智慧 IP 和標頭輪換 - 驗證碼處理 - 指紋管理 ```python= import requests payload = {'api_key': 'APIKEY', 'url': 'https://httpbin.org/ip'} r = requests.get('http://api.scraperapi.com', params=payload) print r.text ```