每位參與資料抓取的 SEO 專家都知道,CAPTCHA 是一個具有挑戰性的障礙,限制了對所需資訊的存取。但是否值得完全避免,還是學習如何繞過它會更好?讓我們透過真實的例子和有效的方法來分析驗證碼是什麼,為什麼它被如此廣泛地使用,以及 SEO 專家如何繞過它。
每個 SEO 專業人士都遇過驗證碼。如果沒有,他們要么不是專業人士,要么誤解了首字母縮寫 SEO(可能與 SMM 或 CEO 混淆),或者他們才剛開始這項具有挑戰性的工作。
CAPTCHA(「完全自動化的公開圖靈測試來區分電腦和人類」)是一種保護網站免受自動化操作(例如資料抓取或機器人攻擊)的方法。驗證碼被翻譯為「Полностью автоматизированный публичный тест Тьюринга дл
人們可能多年來一直否認驗證碼被高估,並認為它不值得投入大量資源。但是,當您需要從搜尋引擎(例如Yandex)檢索數據,而對XML 請求一無所知時,這些論點就站不住腳了……或者,例如,如果客戶想要抓取整個Amazon 並且支付了很高的費用…不然後問題出現了:「別再說了…」儘管有可用的繞過方法,為什麼仍使用驗證碼
例如,亞馬遜應用了三種類型的驗證碼,每種類型出現在不同的情況下,並且他們隨機更改設計,以便自動化工具和抓取工具不能依賴過時的方法。這使得繞過它們的保護變得複雜且成本高昂。
網站保護級別
現代網站所有者嘗試透過使用通用解決方案(例如 reCAPTCHA 或 hCaptcha)來找到平衡。這可以保護網站免受簡單機器人的侵害,而不會對使用者造成嚴重不便。只有在網站面臨大規模機器人攻擊時才會使用更複雜的驗證碼。
讓我們從 SEO 專家的角度考慮這個問題:他們為什麼以及出於什麼目的可能需要繞過驗證碼?
驗證碼繞過對於最基本的任務可能是必要的-分析搜尋引擎中的位置。當然,這可以透過對每日位置監控收費的第三方服務來實現。此外,您還需要支付第三方驗證碼識別服務的費用。
驗證碼在研究競爭對手網站時也可能相關。由於保護等級不同,繞過競爭對手網站上的驗證碼通常比收集搜尋排名更容易。
自動化日常任務是一個更小眾的話題。並不是每個人都使用它,但對於專門的 SEO 專家來說,它可以是節省時間和精力的寶貴工具。
一般來說,計算成本效益很重要——購買位置監控服務和驗證碼識別服務更便宜,還是創建自己的解決方案並降低成本更便宜?當然,如果只有一兩個項目並且客戶付費,則後一種選擇聽起來過於勞動密集。但如果你擁有多個項目並自己支付所有費用……那就值得考慮了。
讓我們探索比簡單地在金鑰收集器中插入 API 金鑰需要更多努力的方法。您需要更深入的知識,而不僅僅是知道如何在服務主頁上找到 API 金鑰並將其插入正確的欄位。
最受歡迎的方法是將驗證碼傳送到專門的服務(例如 2Captcha 或 RuCaptcha),該服務傳回現成的解決方案。這些服務需要根據解決的驗證碼付費。
以下是 Python 解決 reCAPTCHA V2 的標準程式碼範例:
import requests import time API_KEY = 'YOUR_2CAPTCHA_KEY' SITE_KEY = 'YOUR_SITE_KEY' PAGE_URL = 'https://example.com' def get_captcha_solution(): captcha_id_response = requests.post("http://2captcha.com/in.php", data={ 'key': API_KEY, 'method': 'userrecaptcha', 'googlekey': SITE_KEY, 'pageurl': PAGE_URL, 'json': 1 }).json() if captcha_id_response['status'] != 1: print(f"Error: {captcha_id_response['request']}") return None captcha_id = captcha_id_response['request'] print(f"CAPTCHA sent. ID: {captcha_id}") for attempt in range(30): time.sleep(5) result = requests.get("http://2captcha.com/res.php", params={ 'key': API_KEY, 'action': 'get', 'id': captcha_id, 'json': 1 }).json() if result['status'] == 1: print(f"CAPTCHA solved: {result['request']}") return result['request'] elif result['request'] == 'CAPCHA_NOT_READY': print(f"Waiting for solution... attempt {attempt + 1}/30") else: print(f"Error: {result['request']}") return None return None captcha_solution = get_captcha_solution() if captcha_solution: print('CAPTCHA solution:', captcha_solution) else: print('Solution failed.')
此程式碼可協助您自動提交驗證碼進行解決並接收繞過保護所需的令牌。
第二種方法涉及使用住宅代理輪換 IP 位址。這使您可以像不同的人一樣從每個新代理商訪問該網站,從而降低了驗證碼啟動的可能性。
以下是 Python 中使用代理程式輪換的程式碼範例:
import requests from itertools import cycle import time import urllib.parse # List of proxies with individual logins and passwords proxies_list = [ {"proxy": "2captcha_proxy_1:port", "username": "user1", "password": "pass1"}, {"proxy": "2captcha_proxy_2:port", "username": "user2", "password": "pass2"}, {"proxy": "2captcha_proxy_3:port", "username": "user3", "password": "pass3"}, # Add more proxies as needed ] # Proxy rotation cycle proxy_pool = cycle(proxies_list) # Target URL to work with url = "https://example.com" # Headers to simulate a real user headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:129.0) Gecko/20100101 Firefox/129.0" } # Sending several requests with proxy rotation for i in range(5): # Specify the number of requests needed proxy_info = next(proxy_pool) proxy = proxy_info["proxy"] username = urllib.parse.quote(proxy_info["username"]) password = urllib.parse.quote(proxy_info["password"]) # Create a proxy with authorization proxy_with_auth = f"http://{username}:{password}@{proxy}" try: response = requests.get( url, headers=headers, proxies={"http": proxy_with_auth, "https": proxy_with_auth}, timeout=10 ) # Check response status if response.status_code == 200: print(f"Request {i + 1} via proxy {proxy} was successful.") else: print(f"Request {i + 1} ended with status code {response.status_code}") except requests.exceptions.RequestException as e: print(f"Error with proxy {proxy}: {e}") # Delay between requests for natural behavior time.sleep(2)
此範例示範如何使用代理程式輪替向目標網站發出請求,降低被阻止的風險。
第三種方法涉及使用像 Selenium 這樣的無頭瀏覽器來模擬真實的使用者操作。這種方法可能更耗費人力,但也更有效。
這是使用 Selenium 進行代理輪換的範例程式碼:
import requests import time API_KEY = 'YOUR_2CAPTCHA_KEY' SITE_KEY = 'YOUR_SITE_KEY' PAGE_URL = 'https://example.com' def get_captcha_solution(): captcha_id_response = requests.post("http://2captcha.com/in.php", data={ 'key': API_KEY, 'method': 'userrecaptcha', 'googlekey': SITE_KEY, 'pageurl': PAGE_URL, 'json': 1 }).json() if captcha_id_response['status'] != 1: print(f"Error: {captcha_id_response['request']}") return None captcha_id = captcha_id_response['request'] print(f"CAPTCHA sent. ID: {captcha_id}") for attempt in range(30): time.sleep(5) result = requests.get("http://2captcha.com/res.php", params={ 'key': API_KEY, 'action': 'get', 'id': captcha_id, 'json': 1 }).json() if result['status'] == 1: print(f"CAPTCHA solved: {result['request']}") return result['request'] elif result['request'] == 'CAPCHA_NOT_READY': print(f"Waiting for solution... attempt {attempt + 1}/30") else: print(f"Error: {result['request']}") return None return None captcha_solution = get_captcha_solution() if captcha_solution: print('CAPTCHA solution:', captcha_solution) else: print('Solution failed.')
此範例顯示如何使用 Selenium 透過捲動並與網站上的元素互動來模擬真實使用者。
總之,如果您有時間並且想要完成程式碼,結合代理程式輪替和無頭瀏覽器等方法可以產生出色的結果。如果您想簡化事情,請使用為任務提供現成工具的服務。然而,針對每項特定任務仔細選擇最合適的工具至關重要。
祝您免驗證碼存取!
以上是為 SEO 專家提供的高級驗證碼繞過技術以及程式碼範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!