
Rajinder Singh
Deep Learning Researcher

वेब स्क्रैपिंग डेटा संग्रह, बाजार अनुसंधान और प्रतिस्पर्धी विश्लेषण के लिए आवश्यक उपकरण बन गया है। हालांकि, जैसे-जैसे स्क्रैपिंग तकनीक विकसित हुई हैं, वैसे ही वेबसाइटें अपने डेटा की रक्षा करने के लिए रक्षात्मक उपाय विकसित कर रही हैं। जब एक वेबसाइट के डेटा को स्क्रैप करने की कोशिश करते हैं, तो आमतौर पर आपको "कृपया सत्यापित करें कि आप मानव हैं" के संदेश के साथ बाधा का सामना करना पड़ता है, जिसे कैपचा कहा जाता है — जो बॉट्स और मानवों के बीच अंतर करने के लिए डिज़ाइन किए गए चुनौतियां होती हैं।
अगर आपने कभी किसी वेबसाइट को स्क्रैप करने की कोशिश की है और आपको "कृपया सत्यापित करें कि आप मानव हैं" के संदेश के साथ बाधा का सामना करना पड़ा है, तो आप इस चिंता को जानते हैं। अच्छी बात यह है कि एक शक्तिशाली संयोजन है: Scrapling बुद्धिमान वेब स्क्रैपिंग के लिए और CapSolver कैपचा समाधान के लिए।
इस गाइड में हम आपको इन उपकरणों के संयोजन के लिए सभी आवश्यक जानकारी के साथ चलाएंगे और कैपचा-सुरक्षित वेबसाइटों को सफलतापूर्वक स्क्रैप करने में सहायता करेंगे। आप गूगल के ReCaptcha v2, अदृश्य ReCaptcha v3, या Cloudflare के Turnstile के साथ निपटते हैं, हम आपको इन सभी के लिए कवर करेंगे।
Scrapling एक आधुनिक पायथन वेब स्क्रैपिंग लाइब्रेरी है जो खुद को "पहला अनुकूलित स्क्रैपिंग लाइब्रेरी" के रूप में वर्णित करती है जो वेबसाइट परिवर्तनों से सीखती है और उनके साथ बदलती रहती है। इसका उद्देश्य डेटा निकालना आसान बनाना है जबकि बॉट विरोधी क्षमताएं भी प्रदान करता है।
मूल विशेषताओं के लिए:
pip install scrapling
ब्राउजर ऑटोमेशन सहित पूर्ण विशेषताओं के लिए:
pip install "scrapling[fetchers]"
scrapling install
सभी विशेषताओं के साथ AI विशेषताओं के लिए:
pip install "scrapling[all]"
scrapling install
Scrapling HTTP मांगों के लिए क्लास विधियों का उपयोग करता है:
from scrapling import Fetcher
# GET मांग
response = Fetcher.get("https://example.com")
# डेटा के साथ POST मांग
response = Fetcher.post("https://example.com/api", data={"key": "value"})
# प्रतिक्रिया के उपयोग
print(response.status) # HTTP स्थिति कोड
print(response.body) # कच्चे बाइट्स
print(response.body.decode()) # डिकोड किया गया पाठ
CapSolver एक कैपचा समाधान सेवा है जो उन्नत AI का उपयोग करके विभिन्न प्रकार के कैपचा को स्वचालित रूप से हल करता है। यह किसी भी प्रोग्रामिंग भाषा या स्क्रैपिंग फ्रेमवर्क के साथ बिना किसी असुविधा के एपीआई के साथ एकीकृत होता है।
अपने स्वचालन बजट को तुरंत बढ़ाएं!
CapSolver खाता बढ़ाते समय SCRAPLING बोनस कोड का उपयोग करें ताकि प्रत्येक भुगतान पर 6% बोनस प्राप्त करें — विशेष रूप से Scrapling एकीकरण उपयोक्ताओं के लिए।
अब अपने CapSolver डैशबोर्ड में इसे लागू करें
CapSolver दो मुख्य एंडपॉइंट का उपयोग करता है:
POST https://api.capsolver.com/createTaskPOST https://api.capsolver.com/getTaskResultविशिष्ट कैपचा प्रकारों में डूबने से पहले, हम एक पुन: उपयोग करने योग्य हेल्पर फ़ंक्शन बनाएंगे जो CapSolver API वर्कफ़्लो के साथ काम करता है:
import requests
import time
CAPSOLVER_API_KEY = "आपकी आईपी ए कुंजी"
def solve_captcha(task_type, website_url, website_key, **kwargs):
"""
कैपसॉल्वर एपीआई का उपयोग करके सामान्य कैपचा समाधानकर्ता।
आर्ग्स:
task_type: कैपचा के प्रकार (उदाहरण के लिए, "ReCaptchaV2TaskProxyLess")
website_url: कैपचा के साथ पृष्ठ का URL
website_key: कैपचा के लिए साइट कुंजी
**kwargs: कैपचा प्रकार के लिए विशिष्ट अतिरिक्त पैरामीटर
लौटाता है:
dict: टोकन और अन्य डेटा के साथ समाधान का एक शब्दकोश
"""
payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": task_type,
"websiteURL": website_url,
"websiteKey": website_key,
**kwargs
}
}
# कार्य बनाएं
response = requests.post(
"https://api.capsolver.com/createTask",
json=payload
)
result = response.json()
if result.get("errorId") != 0:
raise Exception(f"कार्य बनाना विफल रहा: {result.get('errorDescription')}")
task_id = result.get("taskId")
print(f"कार्य बनाया गया: {task_id}")
# परिणाम प्राप्त करें
max_attempts = 60 # अधिकतम 2 मिनट के लिए पॉलिंग
for attempt in range(max_attempts):
time.sleep(2)
response = requests.post(
"https://api.capsolver.com/getTaskResult",
json={
"clientKey": CAPSOLVER_API_KEY,
"taskId": task_id
}
)
result = response.json()
if result.get("status") == "ready":
print(f"कैपचा {((attempt + 1) * 2)} सेकंड में हल हो गया")
return result.get("solution")
if result.get("errorId") != 0:
raise Exception(f"त्रुटि: {result.get('errorDescription')}")
print(f"इंतजार कर रहे हैं... (प्रयास {attempt + 1})")
raise Exception("समय सीमा समाप्त: कैपचा हल करने में बहुत समय लग गया")
इस फ़ंक्शन कार्य बनाने, परिणाम प्राप्त करने और समाधान लौटाने के पूरे वर्कफ़्लो का प्रबंधन करता है। हम इसका उपयोग इस गाइड के बाकी भाग में करेंगे।
ReCaptcha v2 एक पारंपरिक "मैं एक बॉट नहीं हूं" चेकबॉक्स कैपचा है। जब इसे ट्रिगर किया जाता है, तो यह छवियों में वस्तुओं की पहचान करने के लिए उपयोक्ताओं के साथ पूछताछ कर सकता है (ट्रैफिक लाइट, पैदल चौराहा आदि)। स्क्रैपर्स के लिए, हमें इसे प्रोग्रामेटिक रूप से हल करना होता है।
साइट कुंजी आमतौर पर पृष्ठ HTML में पाई जाती है:
<div class="g-recaptcha" data-sitekey="6LcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD"></div>
या एक स्क्रिप्ट टैग में:
<script src="https://www.google.com/recaptcha/api.js?render=6LcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD"></script>
from scrapling import Fetcher
def scrape_with_recaptcha_v2(target_url, site_key, form_url=None):
"""
ReCaptcha v2 से सुरक्षित पृष्ठ के स्क्रैप करें।
आर्ग्स:
target_url: कैपचा के साथ पृष्ठ का URL
site_key: ReCaptcha साइट कुंजी
form_url: फॉर्म जमा करने के लिए URL (डिफ़ॉल्ट लगभग target_url)
लौटाता है:
सुरक्षित पृष्ठ से प्रतिक्रिया
"""
# CapSolver के साथ कैपचा हल करें
print("ReCaptcha v2 हल कर रहे हैं...")
solution = solve_captcha(
task_type="ReCaptchaV2TaskProxyLess",
website_url=target_url,
website_key=site_key
)
captcha_token = solution["gRecaptchaResponse"]
print(f"टोकन प्राप्त करें: {captcha_token[:50]}...")
# कैपचा टोकन के साथ फॉर्म जमा करें उपयोग करके Scrapling
# ध्यान दें: Fetcher.post() को क्लास विधि के रूप में उपयोग करें (इंस्टेंस विधि नहीं)
submit_url = form_url or target_url
response = Fetcher.post(
submit_url,
data={
"g-recaptcha-response": captcha_token,
# वेबसाइट द्वारा आवश्यक किसी अन्य फॉर्म फ़ील्ड को जोड़ें
}
)
return response
# उदाहरण उपयोग
if __name__ == "__main__":
url = "https://example.com/protected-page"
site_key = "6LcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD"
result = scrape_with_recaptcha_v2(url, site_key)
print(f"स्थिति: {result.status}")
print(f"सामग्री लंबाई: {len(result.body)}") # .body का उपयोग कच्चे बाइट्स के लिए करें
अदृश्य ReCaptcha v2 के लिए (कोई चेकबॉक्स नहीं, फॉर्म जमा करते समय ट्रिगर किया जाता है), isInvisible पैरामीटर जोड़ें:
solution = solve_captcha(
task_type="ReCaptchaV2TaskProxyLess",
website_url=target_url,
website_key=site_key,
isInvisible=True
)
ReCaptcha v2 एंटरप्राइज के लिए, एक अलग कार्य प्रकार का उपयोग करें:
solution = solve_captcha(
task_type="ReCaptchaV2EnterpriseTaskProxyLess",
website_url=target_url,
website_key=site_key,
enterprisePayload={
"s": "आवश्यकता होने पर 'payload_s_value' मान"
}
)
ReCaptcha v3 v2 से अलग है — यह पृष्ठ के पृष्ठभूमि में चलता है और उपयोगकर्ता व्यवहार पर आधारित स्कोर (0.0 से 1.0 तक) निर्धारित करता है। 1.0 के निकट स्कोर के लिए अधिक संभावना है कि उपयोगकर्ता मानव है।
| पहलू | ReCaptcha v2 | ReCaptcha v3 |
|---|---|---|
| उपयोगकर्ता अंतर्क्रिया | चेकबॉक्स/छवि चुनौतियां | कोई नहीं (अदृश्य) |
| आउटपुट | पास/फेल | स्कोर (0.0-1.0) |
| कार्य पैरामीटर | आवश्यक नहीं | आवश्यक |
| जब उपयोग करें | फॉर्म, लॉगिन | सभी पृष्ठ लोड |
कार्य पैरामीटर वेबसाइट के जावास्क्रिप्ट में निर्दिष्ट होता है:
grecaptcha.execute('6LcxxxxxxxxxxxxxxxxABCD', {action: 'submit'})
सामान्य कार्य शामिल हैं: submit, login, register, homepage, contact.
from scrapling import Fetcher
def scrape_with_recaptcha_v3(target_url, site_key, page_action="submit", min_score=0.7):
"""
ReCaptcha v3 से सुरक्षित पृष्ठ के स्क्रैप करें।
आर्ग्स:
target_url: कैपचा के साथ पृष्ठ का URL
site_key: ReCaptcha साइट कुंजी
page_action: कार्य पैरामीटर (grecaptcha.execute में पाए जाने वाले)
min_score: अनुरोध करने के लिए न्यूनतम स्कोर (0.1-0.9)
लौटाता है:
सुरक्षित पृष्ठ से प्रतिक्रिया
"""
print(f"ReCaptcha v3 (कार्य: {page_action}) हल कर रहे हैं...")
solution = solve_captcha(
task_type="ReCaptchaV3TaskProxyLess",
website_url=target_url,
website_key=site_key,
pageAction=page_action
)
captcha_token = solution["gRecaptchaResponse"]
print(f"स्कोर के साथ टोकन प्राप्त करें: {solution.get('score', 'एनए')}")
# टोकन के साथ मांग जमा करें उपयोग करके Scrapling क्लास विधि
response = Fetcher.post(
target_url,
data={
"g-recaptcha-response": captcha_token,
},
headers={
"User-Agent": solution.get("userAgent", "Mozilla/5.0")
}
)
return response
# उदाहरण उपयोग
if __name__ == "__main__":
url = "https://example.com/api/data"
site_key = "6LcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD"
result = scrape_with_recaptcha_v3(url, site_key, page_action="getData")
print(f"प्रतिक्रिया: {result.body.decode()[:200]}") # .body का उपयोग सामग्री के लिए करें
solution = solve_captcha(
task_type="ReCaptchaV3EnterpriseTaskProxyLess",
website_url=target_url,
website_key=site_key,
pageAction=page_action,
enterprisePayload={
"s": "वैकल्पिक s पैरामीटर"
}
)
Cloudflare Turnstile एक नए कैपचा विकल्प है जिसका उपयोग आमतौर पर पारंपरिक कैपचा के एक "उपयोगकर्ता-मित्र, गोपनीयता-संरक्षित" बजाय में किया जाता है। यह अब अधिकांश वेबसाइटों पर आम हो गया है जो Cloudflare का उपयोग करते हैं।
Turnstile तीन मोड में आता है:
अच्छी बात यह है कि CapSolver सभी तीनों के साथ स्वचालित रूप से निपटता है।
पृष्ठ HTML में Turnstile खोजें:
<div class="cf-turnstile" data-sitekey="0x4xxxxxxxxxxxxxxxxxxxxxxxxxx"></div>
या जावास्क्रिप्ट में:
turnstile.render('#container', {
sitekey: '0x4xxxxxxxxxxxxxxxxxxxxxxxxxx',
callback: function(token) { ... }
});
from scrapling import Fetcher
def scrape_with_turnstile(target_url, site_key, action=None, cdata=None):
"""
Cloudflare Turnstile से सुरक्षित पृष्ठ के स्क्रैप करें।
आर्ग्स:
target_url: कैपचा के साथ पृष्ठ का URL
site_key: Turnstile साइट कुंजी (0x4... से शुरू होता है)
action: वैकल्पिक कार्य पैरामीटर
cdata: वैकल्पिक cdata पैरामीटर
लौटाता है:
सुरक्षित पृष्ठ से प्रतिक्रिया
"""
print("Cloudflare Turnstile हल कर रहे हैं...")
# आवश्यकता होने पर मेटाडेटा बनाएं
metadata = {}
if action:
metadata["action"] = action
if cdata:
metadata["cdata"] = cdata
task_params = {
"task_type": "AntiTurnstileTaskProxyLess",
"website_url": target_url,
"website_key": site_key,
}
if metadata:
task_params["metadata"] = metadata
solution = solve_captcha(**task_params)
turnstile_token = solution["token"]
user_agent = solution.get("userAgent", "")
print(f"Turnstile टोकन प्राप्त करें: {turnstile_token[:50]}...")
# टोकन के साथ जमा करें उपयोग करके Scrapling क्लास विधि
headers = {}
if user_agent:
headers["User-Agent"] = user_agent
response = Fetcher.post(
target_url,
data={
"cf-turnstile-response": turnstile_token,
},
headers=headers
)
return response
# उदाहरण उपयोग
if __name__ == "__main__":
url = "https://example.com/protected"
site_key = "0x4AAAAAAAxxxxxxxxxxxxxx"
result = scrape_with_turnstile(url, site_key)
print(f"सफलता! {len(result.body)} बाइट्स प्राप्त किए गए") # .body का उपयोग सामग्री के लिए करें
कुछ विन्यासों में अतिरिक्त पैरामीटर की आवश्यकता होती है:
solution = solve_captcha(
task_type="AntiTurnstileTaskProxyLess",
website_url=target_url,
website_key=site_key,
metadata={
"action": "लॉगिन",
"cdata": "सेशन आईडी या कस्टम डेटा"
}
)
कभी-कभी आसान HTTP मांगें पर्याप्त नहीं होती हैं। वेबसाइटें जटिल बॉट निर्धारण का उपयोग कर सकती हैं जो जांच करती हैं:
स्क्रैपलिंग के स्टील्थीफेचर वास्तविक ब्राउजर इंजन के साथ ब्राउजर स
Rust में वेब स्क्रैपिंग के स्केलेबल आर्किटेक्चर सीखें, reqwest, scraper, असिंक्रोनस स्क्रैपिंग, हेडलेस ब्राउज़र स्क्रैपिंग, प्रॉक्सी रोटेशन, और संगत CAPTCHA का निपटारा।

CapSolver के साथ RoxyBrowser के एकीकरण करें ताकि ब्राउज़र के कार्यों को स्वचालित किया जा सके और reCAPTCHA, Turnstile और अन्य CAPTCHAs को बायपास किया जा सके।
