वेब स्क्रैपिंग में कैप्चा: वे क्यों आते हैं और क्या करें
स्क्रैपिंग के दौरान कैप्चा तब आता है जब कोई साइट तय करती है कि रिक्वेस्ट स्वचालित लगती है। आम कारण हैं: कम समय में बहुत ज़्यादा रिक्वेस्ट, खराब प्रतिष्ठा वाला IP पता, ब्राउज़र के सिग्नल गायब होना, या ऐसे पेज पर पहुंचना जिसे साइट बाकी से ज़्यादा सख्ती से बचाती है। व्यावहारिक जवाब तीन चरणों में है, इसी क्रम में: ट्रिगर कम करें, कोड में कैप्चा पहचानें, और जिस कैप्चा से बच नहीं सकते उसे हल करें। यह गाइड हर चरण को कवर करती है और बाकी के लिए विस्तृत गाइड की ओर इशारा करती है।
साइटें स्क्रैपर्स को कैप्चा क्यों दिखाती हैं
किसी पेज के अनुरोध के समय साइट के पास इंसान और स्क्रिप्ट में फर्क करने का कम तरीका होता है, इसलिए वह पैटर्न देखती है। स्क्रैपर अक्सर इसलिए अलग दिखता है कि वह:
- किसी भी इंसान के क्लिक से तेज़ रिक्वेस्ट भेजता है,
- बिना विराम के एक ही पाथ दोहराता है,
- होम नेटवर्क के बजाय डेटासेंटर पते से आता है,
- ऐसे हेडर भेजता है जो किसी आम ब्राउज़र से मेल नहीं खाते, या
- रिक्वेस्ट के बीच कोई कुकी या सेशन स्टेट नहीं रखता।
इनमें से कोई एक भी काफी हो सकता है। कैप्चा साइट का यह तरीका है कि और पेज देने से पहले एक इंसान जैसा कदम मांगे। पैटर्न घटाने से आम तौर पर कैप्चा भी घटते हैं, और यह उन्हें हल करने से सस्ता है।
कोड में कैप्चा पहचानें
कुछ भी हल करने से पहले जांचें कि आपको मिला पेज कैप्चा पेज है भी या नहीं। एक सरल जांच विजेट का मार्कअप ढूंढती है और sitekey पढ़ती है:
import re
import requests
SITEKEY_RE = re.compile(r'data-sitekey="([0-9a-f-]{36})"')
def fetch(url: str) -> dict:
resp = requests.get(
url,
timeout=30,
headers={"User-Agent": "ExampleBot/1.0 (+https://example.com/bot)"},
)
html = resp.text
if "h-captcha" in html or "g-recaptcha" in html:
match = SITEKEY_RE.search(html)
return {"captcha": True, "sitekey": match.group(1) if match else None, "html": html}
return {"captcha": False, "sitekey": None, "html": html}
page = fetch("https://example.com/search?q=shoes")
if page["captcha"]:
print("captcha found, sitekey:", page["sitekey"])
h-captcha और g-recaptcha स्ट्रिंग केवल वह मार्कअप हैं जो एक पेज इस्तेमाल करता है, इसलिए यह एक संकेत है, गारंटी नहीं। अगर sitekey नहीं मिलती, तो कैप्चा sitekey कैसे खोजें देखें।
जब बच न सकें, तब हल करें
जब PopularCaptcha विजेट पेज पर हो और आपके पास उसका sitekey हो, तो आप Scarnox API से एक POST रिक्वेस्ट में टोकन मांग सकते हैं, और उसे h-captcha-response फ़ील्ड में सबमिट कर सकते हैं। पूरा फ़ंक्शन, एरर हैंडलिंग के साथ, Python से एक रिक्वेस्ट में कैप्चा हल करें में है। टोकन तुरंत इस्तेमाल करें, क्योंकि वह लगभग दो मिनट में समाप्त होता है। समय के विवरण कैप्चा टोकन की समाप्ति में हैं।
Scarnox का आज का लाइव सपोर्ट PopularCaptcha है, proxyless और अपनी proxy दोनों के साथ। reCAPTCHA v2 और v3, Cloudflare Turnstile, GeeTest, AWS WAF और Arkose जल्द आ रहे हैं। अगर आपका टार्गेट इनमें से कोई उपयोग करता है, तो कैप्चा गाइड सामान्य विकल्प समझाती हैं, पर ऐसे सॉल्व पर प्रोडक्शन फ़्लो न बनाएं जो अभी लाइव नहीं है।
हर ब्लॉक पेज के लिए निर्णय का क्रम
जब आपका स्क्रैपर कैप्चा से टकराए, तो निर्णय का एक सरल क्रम काम को ईमानदार रखता है और रिक्वेस्ट की मात्रा कम रखता है:
- क्या कोई और डेटा स्रोत है? अगर कोई API, फ़ीड या एक्सपोर्ट वे फ़ील्ड देता है जिनकी आपको ज़रूरत है, तो उसी पर जाएं और उस पेज को रिक्वेस्ट करना बंद करें।
- **क्या
robots.txtउस पाथ की अनुमति देता है?** अगर नहीं, तो उसे छोड़ दें। जिस पेज को छोड़ने के लिए कहा गया है, उस पर कैप्चा हल न करें। - क्या आपने बहुत ज़्यादा और बहुत तेज़ भेजा? लंबा विराम लें, दर घटाएं, और बाद में फिर जांचें। कई कैप्चा धीमी गति से गायब हो जाते हैं।
- क्या यह कैप्चा लाइव टाइप है? अगर PopularCaptcha है, तो इस गाइड का सॉल्व लागू होता है। अगर वह जल्द आने वाला टाइप है, तो काम रोके रखें और रिलीज़ पर नज़र रखें।
- क्या यह पेज ऐसा है जिसे स्वचालित करने की आपको अनुमति है? अगर जवाब साफ़ नहीं है, तो आगे बढ़ने से पहले साइट के मालिक से पूछें।
चौथा चरण सबसे ज़्यादा छूटता है। सॉल्वर केवल तभी उपयोगी है जब कैप्चा टाइप समर्थित हो, और जो जॉब असमर्थित टाइप को रिट्राई करता है, वह समय और रिक्वेस्ट दोनों बर्बाद करता है।
जॉब में कैप्चा संभालें, लूप में नहीं
सॉल्व को उसी कोड पथ के अंदर रखें जिसे टोकन की ज़रूरत है, ताकि जॉब हर कैप्चा लॉग कर सके, जब कोई पेज बार-बार विफल हो तो रुक सके, और आगे बढ़ सके। एक बेहिसाब लूप जो कैप्चा पेज को लगातार मांगता रहे, उस साइट के फ़ायरवॉल से आपके पते को हमेशा के लिए ब्लॉक करवाने का सबसे तेज़ तरीका है।
विफलताओं पर नज़र रखें
कैप्चा लौटाने वाले पेजों की गिनती रखें, URL और दिन के समय के हिसाब से समूहित करके। कैप्चा केवल साइट के एक सेक्शन पर, या कुछ रिक्वेस्ट के बाद ही आए, तो वह बताता है कि ट्रिगर कहां है। यह जानकारी तेज़ सॉल्वर से ज़्यादा उपयोगी है, क्योंकि यह बताती है कि क्या बदलना है।
क्या न करें
- साइट की सीमाओं से बचने के लिए कई IP पतों में घूमना न करें। यह एवेज़न है, और यह धीमे होने के अनुरोध को लड़ाई में बदल देता है।
- ऐसे पेज स्क्रैप न करें जो लॉगिन के पीछे हैं, और ऐसी क्रेडेंशियल से नहीं जिन्हें इस्तेमाल करने की आपको अनुमति नहीं।
- खाते बनाने, स्पैम पोस्ट करने या सीमित वस्तुएं खरीदने के लिए कैप्चा हल न करें।
ज़िम्मेदारी से स्क्रैप करें
- शुरू करने से पहले साइट की
robots.txtऔर सेवा की शर्तें पढ़ें। अस्वीकृत पाथ और क्रॉल देरी का सम्मान करें। - User-Agent में अपने बॉट की ईमानदार पहचान दें, और संपर्क का एक तरीका भी।
- रिक्वेस्ट दर कम रखें। कैप्चा अक्सर साइट का आपसे धीमे होने को कहने का तरीका होता है।
- साइट कहे तो रुकें, और जिस ब्लॉक का सम्मान करने को कहा गया है उसके आसपास काम न करें।
- व्यक्तिगत डेटा अपने लागू गोपनीयता नियमों के तहत संभालें, और केवल वही इकट्ठा करें जो चाहिए।