वापस ब्लॉग पर

कैसे पायथन में स्क्रैप्लिंग और स्क्रेपलेस के साथ प्रोडक्शन-ग्रेड वेब स्क्रैपर्स बनाएं

Ava Wilson
Ava Wilson

Expert in Web Scraping Technologies

25-May-2026

प्रमुख बिंदु:

  • स्क्रैप्लिंग तीन फ़ेचर्स और अनुकूलनीय चयनकर्ताओं को शिप करता है। HTTP Fetcher (ब्रोसर TLS अनुकरण के साथ), Playwright-समर्थित DynamicFetcher, और StealthyFetcher एक ही पायथन पुस्तकालय में स्थैतिक पृष्ठों, जावास्क्रिप्ट-निर्मित पृष्ठों, और माध्यमिक एंटी-बॉट को कवर करते हैं — और अनुकूलनीय चयनकर्ता तत्वों को संरचना द्वारा पहचानते हैं, न कि केवल एक नाजुक CSS पथ द्वारा।
  • संकट के चरण हैं HTTP → छिपाने → क्लाउड ब्राउज़र। उस सस्ते फ़ेचर से शुरुआत करें जो काम करता है; जब स्थानीय छिपाव IP प्रतिष्ठा, उन्नत बॉट प्रबंधक, या भू-लॉक सामग्री पर हिट करता है, तो आप अपने पार्सिंग कोड को फिर से लिखे बिना क्लाउड ब्राउज़र पर बढ़ाते हैं।
  • एकीकरण एक पंक्ति है। स्क्रैप्लिंग के Playwright फ़ेचर को CDP पर एक स्क्रैपलेस सत्र की ओर इंगित करें — DynamicFetcher.fetch(url, cdp_url=session.browser_ws_endpoint) — और रेंडरिंग, प्रॉक्सी अपतटीय, और फिंगरप्रिंटिंग सभी क्लाउड-साइड होती हैं।
  • स्क्रैपलेस अपतटीय और फिंगरप्रिंट को संभालता है। स्क्रैपलेस स्क्रैपिंग ब्राउज़र 195+ देशों में आवासीय प्रॉक्सी के माध्यम से रूट होता है और प्रति सत्र ब्राउज़र के फिंगरप्रिंट को यादृच्छिक बनाता है, इसलिए क्लाउड ब्राउज़र उन पृष्ठों को प्रस्तुत करता है जिन पर एक स्थानीय छिपा हुआ ब्राउज़र फ़िल्टर हो जाता है।
  • अनुकूलनीय चयनकर्ता DOM परिवर्तन को सहन करते हैं। स्क्रैप्लिंग एक लेआउट परिवर्तन के बाद एक तत्व को पुनः स्थानांतरित कर सकता है उसके पिछले विशेषताओं और स्थिति से मेल खाकर, इसलिए एक स्क्रैपर लक्ष्य साइट के मार्कअप को घुमाने पर भी पंक्तियाँ लौटाता रहता है।
  • शुरुआत के लिए नि:शुल्क। नए स्क्रैपलेस खातों में मुफ्त स्क्रैपिंग ब्राउज़र रनटाइम शामिल है — स्क्रैपलेस पर साइन अप करें।

परिचय: जब स्थानीय छिपाव की सीमा समाप्त हो जाती है

डायनामिक, जावास्क्रिप्ट-भारी, एंटी-बॉट-सुरक्षित पृष्ठ सरल HTTP स्क्रैपर्स की चुपचाप विफलता का स्थल हैं। एक requests + ब्यूटीफुलसूप स्क्रिप्ट HTTP 200 और एक खाली परिणाम सेट लौटाती है: यह मार्कअप जो उसने पार्स किया वह कभी भी डेटा नहीं रखता, क्योंकि मूल्य, लिस्टिंग, या समीक्षाएँ पहली प्रतिक्रिया के बाद जावास्क्रिप्ट द्वारा इंजेक्ट की जाती हैं। पृष्ठ ब्राउज़र में ठीक लगता है और आपके स्क्रैपर के लिए खाली दिखता है।

स्क्रैप्लिंग मंजिल उठाता है। यह तीन फ़ेचर्स के साथ एक तेज़ पायथन स्क्रैपिंग पुस्तकालय है — एक HTTP Fetcher जो वास्तविक ब्राउज़र की TLS हैंडशेक का अनुकरण करता है, जावास्क्रिप्ट रेंडरिंग के लिए Playwright-समर्थित DynamicFetcher, और एक StealthyFetcher जो छिपाव पैच और क्लाउडफ्लेयर संचालन को जोड़ता है — साथ ही ऐसे अनुकूलनीय चयनकर्ता जो DOM परिवर्तनों को सहन करते हैं। यह स्थैतिक पृष्ठों और मध्यम एंटी-बॉट का एक अच्छा भाग कवर करता है। लेकिन आपके लैपटॉप पर चल रहा एक ब्राउज़र अभी भी एक डेटा सेंटर या घरेलू IP के साथ एक ज्ञात प्रतिष्ठा ले जाता है, और उन्नत बॉट प्रबंधक ऑटोमेशन का फिंगरप्रिंट लेते हैं चाहे पृष्ठ स्तर की छिपाव कितनी भी साफ हो। उस बिंदु पर पृष्ठ मानव के लिए रेंडर होता है और आपके लिए चुनौती दी जाती है।

यह ट्यूटोरियल दो स्तरों में एक पायथन पाइपलाइन बनाता है। स्तर 1 स्क्रैप्लिंग अपने आप पर है — स्थैतिक और मध्यम-सुरक्षित पृष्ठों के लिए सही उपकरण। स्तर 2 स्क्रैप्लिंग के DynamicFetcher को Scrapeless स्क्रैपिंग ब्राउज़र के माध्यम से CDP के माध्यम से रूट करता है, इसलिए रेंडरिंग आवासीय प्रॉक्सियों और प्रति-सत्र एंटी-डिटेक्शन फिंगरप्रिंटिंग के पीछे क्लाउड साइड होती है जबकि आपका स्क्रैप्लिंग पार्सिंग कोड बिल्कुल वही रहता है। LangChain एकीकरण पोस्ट में देखें कि एक एजेंट फ्रेमवर्क के माध्यम से संचालित एक ही स्क्रैपलेस स्क्रैपिंग ब्राउज़र प्राइमिटिव का उपयोग कैसे किया जाए।


आप क्या बना सकते हैं

दो-स्तरीय पैटर्न — स्क्रैप्लिंग फ़ेचर्स सामने, स्क्रैपलेस स्क्रैपिंग ब्राउज़र संकट के पीछे — उन अधिकांश कार्यों को कवर करता है जो एक साधारण HTTP स्क्रैपर को तोड़ते हैं:

  • SPA स्टोरफ्रंट पर मूल्य और स्टॉक मॉनिटर। एकल-पृष्ठ अनुप्रयोग उत्पाद पृष्ठों को रेंडर करें जिनकी कीमतें एक दूसरे XHR के माध्यम से हाइड्रेट होती हैं, फिर उन नंबरों को निकालें जिन्हें स्क्रैप्लिंग रेंडर किए गए DOM से पार्स करता है।
  • SERP-लगभग निष्कर्षण। जावास्क्रिप्ट के रूप में शिप किए गए खोज-शैली परिणाम पृष्ठों से जैविक परिणाम ब्लॉकों और स्निपेट्स को खींचें, फिर अनुकूलनीय चयनकर्ताओं के साथ उनके माध्यम से पृष्ठ करें।
  • जावास्क्रिप्ट निर्देशिकाओं से लीड सूचियाँ। व्यवसाय-सूची और सदस्य-निर्देशिका साइटों पर चलें जो क्लाइंट-साइड पर पंक्तियाँ रेंडर करते हैं, और संपर्क फ़ील्ड को टाइप किए गए रिकॉर्ड में इकट्ठा करें।
  • आवासीय अपतटीय के माध्यम से भू-विशिष्ट स्नैपशॉट। स्क्रैपलेस प्रॉक्सी देश को पिन करके उस लिस्टिंग, मूल्य या उपलब्धता को कैप्चर करें जो एक स्थानीय उपयोगकर्ता देखेगा, न कि जो भी आपके कार्यालय का IP हल करता है।
  • रेंडर किए गए पृष्ठों का RAG संग्रहण। प्रकाशक और दस्तावेज़ पृष्ठों को रेंडर करें ताकि एक एम्बेडिंग पाइपलाइन के लिए सामग्री को साफ़ किया जा सके, ताकि पुनर्प्राप्ति परत जो पृष्ठ वास्तव में दिखाती है, को अनुक्रमित कर सके, न कि एक खाली खोल।
  • लेआउट परिवर्तनों को सहन करने वाले मजबूत स्क्रैपर्स। स्क्रैप्लिंग के अनुकूलनीय चयनकर्ताओं पर निर्भर रहें ताकि एक निर्धारित स्क्रैपर बाद में पंक्तियाँ वापस करता रहे जब लक्ष्य साइट अपने DOM को फिर से व्यवस्थित करती है, बजाय इसके कि अगली रोन पर चुपचाप विफल हो जाए।
  • उन्नत एंटी-बॉट के पीछे हार्ड-टार्गेट निष्कर्षण। जब एक साइट एक उन्नत बॉट प्रबंधक को आगे लोड करती है जिसे स्थानीय छिपाव साफ नहीं कर सकता, तो एक ही स्क्रैप्लिंग कोड को स्क्रैपलेस स्क्रैपिंग ब्राउज़र पर बढ़ाएँ।
    स्क्रेपलेस में, हम केवल सार्वजनिक उपलब्ध डेटा तक पहुंचते हैं जबकि लागू कानूनों, नियमों और वेबसाइट की गोपनीयता नीतियों का सख्ती से पालन करते हैं। इस पोस्ट का सामग्री केवल प्रदर्शन उद्देश्यों के लिए है।

स्क्रेपलिंग को स्क्रेपलेस के साथ क्यों जोड़ें

स्क्रेपलिंग पार्सिंग,(fetcher ergonomics) और अनुकूली चयनकर्ताओं को संभालता है; स्क्रेपलेस स्क्रेपिंग ब्राउज़र उस बचाव के प्लंबिंग को संभालता है जो एक स्थानीय ब्राउज़र नहीं कर सकता। दोनों एक साथ साफ-सुथरे तरीके से स्लॉट होते हैं क्योंकि हस्तांतरण एक एकल CDP अंतिम बिंदु है।

  • एंटी-डिटेक्शन क्लाउड ब्राउज़र। स्क्रेपलेस स्क्रेपिंग ब्राउज़र एक स्वयं के विकसित क्रोमियम पर चलता है जिसमें पूर्ण क्लाउड-पक्ष जावास्क्रिप्ट रेंडरिंग होती है, इसलिए एसपीए, अनंत-स्क्रॉल फ़ीड और लेज़ी-लोडेड पैनल स्क्रेपलिंग द्वारा पार्स करने से पहले हाइड्रेट होते हैं।
  • 195+ देशों में रेजिडेंशियल प्रॉक्सी। जब आप एक सत्र बनाते हैं तो proxy_country सेट करें और क्लाउड ब्राउज़र उस क्षेत्र में वास्तविक रेजिडेंशियल आईपी से बाहर निकलता है जिसे आप लक्षित करते हैं, इसलिए भू-प्रतिबंधित पृष्ठ वही लौटाते हैं जो एक स्थानीय उपयोगकर्ता देखता है।
  • प्रति-सेशन फिंगरप्रिंट रेंडमाइजेशन। प्रत्येक सत्र को एक रेंडमाइज्ड फिंगरप्रिंट मिलता है - उपयोगकर्ता एजेंट, समय क्षेत्र, वेबजीएल और कैनवास - जिनसे बार-बार चलाने से एक ही पहचाने योग्य पहचान में नहीं गिरता।
  • cdp_url ड्रॉप-इन। स्क्रेपलेस सत्र अंतिम बिंदु को cdp_url के रूप में DynamicFetcher.fetch(...) में पास करें और स्क्रेपलिंग के एपीआई में कुछ भी अन्य नहीं बदलता है - वही चयनकर्ता, वही परिणाम वस्तुएं, वही पार्सिंग कोड।
  • session_ttl के माध्यम से सत्र की निरंतरता। निर्माण के समय session_ttl सेट करके कई पृष्ठ लोड के बीच एक सत्र खुला रखें, ताकि गर्म कुकीज़ और नेविगेशन स्थिति एकल रन में अनुरोधों के बीच ले जाएं।

रनटाइम शुरू करने के लिए स्वतंत्र है और उपयोग के साथ स्केल करता है - स्क्रेपलेस मूल्य निर्धारण के लिए स्तरों को देखें, और स्क्रेपलेस पर मुफ्त योजना में अपना एपीआई कुंजी प्राप्त करें।


स्क्रेपलिंग की तुलना अनुरोधों, ब्यूटीफुलसूप और स्क्रैपी से कैसे करें

यदि आपका वर्तमान स्टैक requests + BeautifulSoup या Scrapy है, तो यहां स्क्रेपलिंग कैसे फिट बैठता है और स्क्रेपलेस क्लाउड ब्राउज़र इसके पीछे बैठने के बाद क्या बदलता है।

टूल जावास्क्रिप्ट रेंडर करता है एंटी-बॉट / स्टील्थ चयनकर्ता स्थिरता सबसे अच्छा है
requests + BeautifulSoup नहीं कोई नहीं (कच्चा HTTP) मैन्युअल; रीइन्कार्नेशन पर टूटता है छोटे स्थैतिक पृष्ठ और JSON एपीआई
Scrapy केवल ऐड-ऑन के माध्यम से (जैसे, प्लेरेक्ट का इंटीग्रेशन) कोई अंतर्निर्मित नहीं मैन्युअल; रीइन्कार्नेशन पर टूटता है बड़े असिंक्रोनस क्रॉल जो आप स्वयं बनाते और होस्ट करते हैं
स्क्रेपलिंग — Fetcher नहीं ब्राउज़र-TLS अनुकरण उपलब्ध अनुकूली चयनकर्ता फिंगरप्रिंट-सचेत HTTP के साथ तेज स्थैतिक फ़ेच
स्क्रेपलिंग — DynamicFetcher / StealthyFetcher हां (स्थानीय ब्राउज़र) स्टील्थ पैच, क्लाउडफ्लेयर हैंडलिंग अनुकूली चयनकर्ता JS पृष्ठ और मध्यम एंटी-बॉट, अपनी मशीन पर
स्क्रेपलिंग + स्क्रेपलेस (cdp_url) हां (क्लाउड ब्राउज़र) 195+ देशों में रेजिडेंशियल प्रॉक्सी + प्रति-सेशन फिंगरप्रिंटिंग अनुकूली चयनकर्ता JS-भारी, भू-बद्ध, या कठिन एंटी-बॉट पृष्ठ बड़े पैमाने पर

प्रगति जोड़ने वाली है। requests/BeautifulSoup को वहां रखें जहां यह पहले से काम करता है, जब एक पृष्ठ को एक ब्राउज़र या फिंगरप्रिंट-सचेत HTTP की आवश्यकता होती है तो स्क्रेपलिंग के फ़ेचर्स के लिए पहुंचें, और जब स्थानीय रेंडरिंग फ़िल्टर्ड हो जाती है तो स्क्रेपलिंग को स्क्रेपलेस स्क्रेपिंग ब्राउज़र के माध्यम से cdp_url पर रूट करें। पार्सिंग कोड — page.css(...), page.xpath(...) — सभी तीनों में समान रहता है।


पूर्वापेक्षाएँ

शुरू करने से पहले, सुनिश्चित करें कि आपके पास है:

  • पायथन 3.10+ — स्क्रेपलिंग 0.4.8 की आवश्यकता है।
  • pip — नीचे दिए गए पैकेज स्थापित करने के लिए।
  • एक स्क्रेपलेस खाता और एपीआई कुंजीस्क्रेपलेस वेबसाइट पर मुफ्त योजना के लिए साइन अप करें, फिर सेटिंग्स → एपीआई कुंजी प्रबंधन से अपनी कुंजी प्राप्त करें।
  • CSS/XPath चयनकर्ताओं और टर्मिनल के साथ बुनियादी परिचितता — आप दोनों का उपयोग पृष्ठों को फ़ेच करने और उनसे मान निकालने के लिए करेंगे।

इंस्टॉल करें

आपको केवल दो पैकेजों की आवश्यकता है: स्क्रेपलिंग फ़ेचिंग और पार्सिंग के लिए, और आधिकारिक स्क्रेपलेस SDK क्लाउड-ब्राउज़र सत्रों को मिंट करने के लिए।

1. स्क्रेपलिंग और स्क्रेपलेस SDK स्थापित करें

bash Copy
pip install "scrapling[fetchers]" scrapeless
scrapling install   # DynamicFetcher / StealthyFetcher के लिए स्थानीय ब्राउज़र्स को फ़ेच करता है (यदि आप केवल cdp_url के माध्यम से दूरस्थ स्क्रेपलेस क्लाउड ब्राउज़र का उपयोग करते हैं तो छोड़ दें)

scrapling[fetchers] आपको फ़ेच-और-पार्स परत प्रदान करता है ( Fetcher, DynamicFetcher, और StealthyFetcher क्लासेस के साथ-साथ एक पार्सेल-जैसा चयनकर्ता एपीआई), जबकि scrapeless आधिकारिक SDK है जो स्क्रेपलेस स्क्रेपिंग ब्राउज़र सत्रों को मिंट करता है और आपको एक CDP अंतिम बिंदु सौंपता है जिससे आप जुड़े रहते हैं।

2. अपनी स्क्रेपलेस एपीआई कुंजी सेट करें

अपने कुंजी को एक्सपोर्ट करें ताकि SDK इसे पढ़ सके:

bash Copy
export SCRAPELESS_API_KEY=your_api_token_here

Windows पर, setx SCRAPELESS_API_KEY "your_api_token_here" (स्थायी, नया शेल) या $env:SCRAPELESS_API_KEY="your_api_token_here" (वर्तमान PowerShell सत्र) का उपयोग करें। Scrapeless SDK स्वचालित रूप से इस चर को पढ़ता है - आपको कोड में कुंजी पास करने की आवश्यकता नहीं है।

3. इंस्टॉलेशन का स्मोक-टेस्ट करें

तीन फ़ेचर्स को आयात करके और एक स्थिर पृष्ठ से कुछ मान खींचकर वातावरण की पुष्टि करें:

python Copy
from scrapling.fetchers import Fetcher, DynamicFetcher, StealthyFetcher

page = Fetcher.get("https://quotes.toscrape.com/")
print(page.status, len(page.css("span.text::text")), "उद्धरण")  # -> 200 10 उद्धरण

यदि आप 200 10 उद्धरण देखते हैं, तो Scrapling स्थापित है और सही ढंग से पार्स कर रहा है, और आप Scrapeless स्क्रैपिंग ब्राउज़र में कनेक्ट करने के लिए तैयार हैं।


कदम 1 — तीन Scrapling फ़ेचर्स

Scrapling तीन फ़ेचर्स वितरित करता है जो तेजी के लिए माफी मांगते हैं। एक सामान्य नियम है कि सबसे हल्का फ़ेचर चुनना चाहिए जो आपको आवश्यक डेटा लौटाता है, फिर जब कोई अनुरोध अवरुद्ध या खाली वापस आए, तो केवल उससे बढ़ें: साधारण HTTP के लिए Fetcher से शुरू करें, जब पृष्ठ को रेंडर करने के लिए JavaScript की आवश्यकता हो तो DynamicFetcher पर जाएं, और जब एक एंटी-बॉट परत मार्ग में हो तो StealthyFetcher का उपयोग करें।

फ़ेचर इंजन प्रयोग करें जब
Fetcher HTTP via curl_cffi (ब्राउज़र-TLS अनुकरण) स्थिर पृष्ठ और JSON APIs - JavaScript की आवश्यकता नहीं
DynamicFetcher Playwright JS-रेंडर किए गए पृष्ठ, SPA, धीरे-धीरे लोड होने वाली सामग्री
StealthyFetcher Stealth Playwright एंटी-बॉट रक्षा, जैसे Cloudflare इंटरस्टिशियल्स

तीनों एक ही मॉड्यूल से आयात करते हैं और पार्सल-जैसी प्रतिक्रिया लौटाते हैं, इसलिए चयनकर्ता API (.css(...), .xpath(...)) एक समान है चाहे किस फ़ेचर ने पृष्ठ उत्पन्न किया हो।

python Copy
from scrapling.fetchers import Fetcher

# HTTP फ़ेच ब्राउज़र-TLS अनुकरण के साथ; एक पार्सल-जैसी प्रतिक्रिया लौटाता है।
page = Fetcher.get("https://books.toscrape.com/", impersonate="chrome", stealthy_headers=True)
title = page.css("article.product_pod h3 a::attr(title)")  # -> पहला पुस्तक शीर्षक
python Copy
from scrapling.fetchers import DynamicFetcher

# Playwright JS को रेंडर करता है, फिर हाइड्रेटेड पृष्ठ को पार्सल-जैसी प्रतिक्रिया के रूप में लौटाता है।
# इसकी आवश्यकता होती है एक स्थानीय ब्राउज़र (run `scrapling install`) या एक दूरस्थ ब्राउज़र cdp_url के माध्यम से (अगला कदम)।
page = DynamicFetcher.fetch("https://quotes.toscrape.com/js/", network_idle=True)
quotes = page.css("span.text::text")  # -> JS-रेंडर किए गए उद्धरण, अब दिखाई दे रहे हैं
python Copy
from scrapling.fetchers import StealthyFetcher

# Stealth Playwright एंटी-बॉट हैंडशेक करने का प्रयास करता है, फिर पृष्ठ लौटाता है।
page = StealthyFetcher.fetch("https://example.com/protected-page",
                             solve_cloudflare=True, block_webrtc=True, hide_canvas=True)
content = page.css("main ::text")  # -> चुनौती समाप्त होने के बाद पृष्ठ टेक्स्ट

कदम 2 — एक प्रॉक्सी जोड़ना (और जहां स्थानीय स्टेल्थ रुकता है)

एक साफ डेटा सेंटर IP उन पहले चीजों में से एक है जिसे एक बॉट प्रबंधक चिह्नित करता है। आवासीय प्रॉक्सियों के माध्यम से अनुरोधों को रूट करना उन IP-प्रतिष्ठा अवरोधों को कम करता है क्योंकि प्रदर्शन पते की तरह दिखता है। प्रत्येक Scrapling फ़ेचर एक ही proxy= तर्क के माध्यम से एक प्रॉक्सी स्वीकार करता है, इसलिए आप बिना अपने कोड के बाकी हिस्सों को बदले एक जोड़ सकते हैं।

python Copy
from scrapling.fetchers import Fetcher, StealthyFetcher

# किसी भी फ़ेचर के माध्यम से proxy= पर एक प्रॉक्सी स्ट्रिंग पास करें।
page = Fetcher.get("https://books.toscrape.com/",
                   proxy="http://<user>:<pass>@<host>:<port>")

# StealthyFetcher इसी तर्क को लेता है जबकि यह एंटी-बॉट चुनौती को काम करता है।
page = StealthyFetcher.fetch("https://example.com/protected-page",
                            proxy="http://<user>:<pass>@<host>:<port>",
                            solve_cloudflare=True)

यहीं पर Scrapeless प्रॉक्सी कहानी में फिट होता है। Scrapeless 195+ देशों में आवासीय प्रॉक्सियों की पेशकश करता है, और Scrapling के आगे उन्हें रखने के दो तरीके हैं। सबसे सरल पथ उन्हें क्लाउड-ब्राउज़र सत्र स्तर पर लागू करना है: जब आप DynamicFetcher को Scrapeless स्क्रैपिंग ब्राउज़र सत्र से जोड़ते हैं, तो आप proxy_country के साथ एग्रेस को पिन करते हैं (अगले कदम में दिखाया गया) और कभी भी प्रॉक्सी स्ट्रिंग को छूते नहीं हैं। Scrapeless एक स्वतंत्र प्रॉक्सी उत्पाद भी प्रदान करता है जिसका गेटवे क्रेडेंशियल सीधे Scrapling के proxy= तर्क में डाला जाता है - Scrapeless प्रॉक्सी समाधान देखें प्रस्ताव के लिए और docs.scrapeless.com के लिए सटीक गेटवे स्ट्रिंग के लिए जिन्हें <user>:<pass>@<host>:<port> प्लेसहोल्डर के स्थान पर पेस्ट करना है।

एक अच्छी प्रॉक्सी IP-प्रतिष्ठा मुद्दे को ठीक करती है, लेकिन यह सबकुछ ठीक नहीं करती। स्थानीय स्टेल्थ ब्राउज़र अभी भी उन्नत बॉट प्रबंधकों द्वारा फ़िल्टर किए जाते हैं और भारी क्लाइंट-साइड JavaScript पर अटक जाते हैं, कोई फर्क नहीं पड़ता कि एग्रेस IP कितनी साफ है। यही वह जगह है जहां Scrapeless क्लाउड ब्राउज़र ऊपर आता है - अगले कदम में कवर किया गया।


कदम 3 — Scrapling को Scrapeless क्लाउड ब्राउज़र (cdp_url) के माध्यम से रूट करें

जब स्थानीय स्टील्थ खत्म हो जाती है - भारी क्लाइंट-साइड रेंडरिंग, एकAdvanced बोट प्रबंधक, या एक पृष्ठ जो केवल एक विशिष्ट देश से हल होता है - SDK के साथ एक स्क्रैपलेस सत्र बनाएं और उसके CDP अंत बिंदु को स्क्रैप्लिंग को सौंपें। SDK सत्र बनाता है; स्क्रैप्लिंग इसे चलाता है। आवासीय प्रॉक्सी (proxy_country) और ब्राउज़र फ़िंगरप्रिंटिंग क्लाउड-साइड द्वारा स्क्रैपलेस स्क्रैपिंग ब्राउज़र द्वारा प्रबंधित किया जाता है, इसलिए आपका स्क्रैप्लिंग कोड वही रहता है सिवाय एक अतिरिक्त तर्क: cdp_url

python Copy
from scrapeless import Scrapeless
from scrapeless.types import ICreateBrowser
from scrapling.fetchers import DynamicFetcher

client = Scrapeless()  # SCRAPELESS_API_KEY पढ़ता है
session = client.browser.create(ICreateBrowser(proxy_country="US", session_ttl=240))

page = DynamicFetcher.fetch(
    "https://quotes.toscrape.com/js/",
    cdp_url=session.browser_ws_endpoint,
    network_idle=True,
)

quotes = page.css("span.text::text")
authors = page.css("small.author::text")

session.browser_ws_endpoint एक वेबसॉकेट CDP URL है जो इस प्रकार के रूप में है wss://browser.scrapeless.com/browser?token=...&proxy... - स्क्रैप्लिंग इससे ठीक उसी तरह से कनेक्ट होता है जैसे वह एक स्थानीय ब्राउज़र से कनेक्ट होता। पहले/बाद का पूरा बिंदु है: एक सामान्य Fetcher.get पर https://quotes.toscrape.com/js/ 0 उद्धरण लौटाता है क्योंकि HTTP पृष्ठ का जावास्क्रिप्ट निष्पादित नहीं कर सकता, जबकि स्क्रैपलेस cdp_url के माध्यम से लाए गए समान पृष्ठ पर 10 उद्धरण (उनके लेखकों के साथ) रेंडर होते हैं। यह प्लेटफ़ॉर्म व्यवहार है, कोई ट्यूनिंग ट्रिक नहीं - क्लाउड ब्राउज़र JS चलाता है, फिर स्क्रैप्लिंग परिणामी DOM का विश्लेषण करता है।

StealthyFetcher.fetch(...) cdp_url को समान पैटर्न के साथ स्वीकार करता है जब आप स्क्रैप्लिंग की स्टील्थ लेयर को क्लाउड ब्राउज़र के ऊपर चाहते हैं।


चरण 4 - अनुकूली चयनकर्ता जो DOM ड्रिफ्ट सहन करते हैं

चुनावकर्ता किसी भी स्क्रैपर का सबसे नाजुक हिस्सा होते हैं: एक डिज़ाइन फिर से नाम देता है या एक तत्व को स्थानांतरित करता है, और हर css(...) कॉल चुपचाप कुछ भी नहीं लौटाता है। स्क्रैप्लिंग का अनुकूली मोड इसके खिलाफ है। फेच पर adaptive=True (और वैकल्पिक रूप से adaptive_domain=...) पास करें, और स्क्रैप्लिंग आपके द्वारा चुने गए प्रत्येक तत्व का एक फ़िंगरप्रिंट संग्रहीत करता है। जब DOM बदलता है, तो यह समानता द्वारा संग्रहीत तत्व को स्थानांतरित करता है न कि सटीक पथ द्वारा, इसलिए आपके चयनकर्ता लेआउट परिवर्तनों के पार कम समय में हल होते रहते हैं।

python Copy
from scrapling.fetchers import DynamicFetcher

# पहली बार चलाना: सामान्य रूप से चुनें; स्क्रैप्लिंग याद रखता है कि प्रत्येक तत्व कैसा दिखता था।
page = DynamicFetcher.fetch(
    "https://quotes.toscrape.com/js/",
    cdp_url=session.browser_ws_endpoint,
    network_idle=True,
    adaptive=True,
    adaptive_domain="quotes.toscrape.com",
)
quotes = page.css("span.text::text")

# बाद में, जब साइट अपने मार्कअप को फिर से क्रम में लाती है: उसी कॉल के साथ फिर से चुनें।
# भले ही "span.text" अब मेल न खाता हो, अनुकूली मोड संग्रहीत तत्व को फिर से स्थानांतरित करता है।
page = DynamicFetcher.fetch(
    "https://quotes.toscrape.com/js/",
    cdp_url=session.browser_ws_endpoint,
    network_idle=True,
    adaptive=True,
    adaptive_domain="quotes.toscrape.com",
)
quotes = page.css("span.text::text")

उन पृष्ठों पर अनुकूली चयनकर्ता के लिए पहुँचें जिन्हें आप बार-बार स्क्रैप करते हैं और जो लगातार कॉस्मेटिक परिवर्तन भेजते हैं - यह छोटे DOM भ्रमण को अवशोषित करता है ताकि आप केवल एक वास्तविक डिज़ाइन फिर से जाने के बाद चयनकर्ताओं पर फिर से विचार करें।


चरण 5 - एक क्लाउड सत्र में कई पृष्ठों को क्रॉल करें

अधिकांश वास्तविक कार्य एक URL से अधिक फैले होते हैं - पेजिनेटेड लिस्टिंग, खोज परिणाम, श्रेणी के पेड़। प्रति पृष्ठ एक नया क्लाउड ब्राउज़र बनाने से गर्म सत्र बर्बाद हो जाता है और हर बार फिर से कनेक्शन हैंडशेक का भुगतान करता है। स्क्रैप्लिंग का DynamicSession एकल कनेक्शन को स्क्रैपलेस क्लाउड ब्राउज़र के साथ खोलें रखता है और इसके माध्यम से प्रत्येक पृष्ठ को लाता है, इसलिए कुकीज़, आवासीय पहचान और नेविगेशन राज्य पूरे क्रॉल में चलते हैं।

python Copy
from scrapeless import Scrapeless
from scrapeless.types import ICreateBrowser
from scrapling.fetchers import DynamicSession

client = Scrapeless()
session = client.browser.create(ICreateBrowser(proxy_country="US", session_ttl=300))

rows = []
with DynamicSession(cdp_url=session.browser_ws_endpoint) as crawler:
    for n in range(1, 4):  # पृष्ठ 1..3
        url = "https://quotes.toscrape.com/js/" if n == 1 else f"https://quotes.toscrape.com/js/page/{n}/"
        page = crawler.fetch(url, network_idle=True)
        quotes = page.css("span.text::text")
        authors = page.css("small.author::text")
        rows += [{"quote": str(q), "author": str(a)} for q, a in zip(quotes, authors)]

print(len(rows), "पंक्तियाँ")  # यहाँ दस उद्धरण पंक्तियाँ जमा होती हैं

प्रत्येक पृष्ठ दस उद्धरण पंक्तियाँ देता है, जो एक पुन: प्रयुक्त क्लाउड-ब्राउज़र सत्र में rows में जमा होती हैं। network_idle=True प्रत्येक पृष्ठ के हाइड्रेट होने तक इंतजार करता है; एक छोटा या ख़ाली पृष्ठ एक पुनः प्रयास संकेत के रूप में माना जाना चाहिए न कि सूची के अंत के रूप में। एक सूची से विवरण क्रॉल करने के लिए, पहले लिस्टिंग को लाएँ, विवरण URLs को page.css("a::attr(href)") के साथ एकत्र करें, और फिर उन सभी को उसी crawler के माध्यम से लाएँ - आवासीय सत्र और फ़िंगरप्रिंट पूरे चलने के दौरान स्थिर रहते हैं।


चरण 6 - उत्पादन कठिनाई

एक कामकाजी स्क्रिप्ट से एक विश्वसनीय नौकरी में संक्रमण मुख्य रूप से बैकप्रेशर और पुनर्प्राप्ति के बारे में है। कुछ नियम सबसे अधिक महत्व रखते हैं:

  • संवहन को सीमित करें। प्रति होस्ट ≤3 क्लाउड-ब्राउज़र सत्रों पर रोकें। इससे अधिक धकेलना दर-सीमाओं और कनेक्शन रीसेट को आमंत्रित करता है, और अतिरिक्त विफलताएँ शायद ही कभी अतिरिक्त थ्रूपुट को सही ठहराती हैं।
  • पुनः प्रयास करें अस्थायी कनेक्ट त्रुटियों के साथ बैकऑफ़। टनल और टाइमआउट त्रुटियाँ जैसे ERR_TUNNEL_CONNECTION_FAILED स्वाभाविक रूप से अस्थायी होती हैं। इन्हें पकड़ें, गुणनात्मक बैकऑफ़ के साथ प्रतीक्षा करें, और फिर से प्रयास करें - एक ही विफल कनेक्शन को मृत पृष्ठ के रूप में न मानें।
  • ProxyRotator के साथ प्रवाह को घुमाएँ। Scrapling का ProxyRotator अनुरोधों के बीच प्रॉक्सी चक्रित करता है ताकि आप एक IP से किसी लक्ष्य पर जोर न दें; इसे Scrapeless आवासीय प्रॉक्सी के साथ जोड़ें ताकि भू-बाधित कार्य के लिए।
  • चरणों में एक सत्र का पुन: उपयोग करें। session_ttl (जैसे 240 सेकंड) के साथ एक बार मिंट करें और एक बहु-चरण प्रवाह के माध्यम से वही browser_ws_endpoint पास करें - लॉग इन करें, नेविगेट करें, निकासी करें - प्रत्येक अनुरोध के लिए ताजा ब्राउज़र खड़ा करने के लिए भुगतान करने के बजाय।
  • अदृश्य क्षेत्रों का उपचार नल वाला करें। असली पृष्ठ कुछ पंक्तियों पर रेटिंग, लेखकों, या कीमतों को छोड़ देते हैं। गायब चयनकर्ताओं को None के रूप में डिफ़ॉल्ट करें बजाय इस पर जोर देने के कि वे मौजूद हैं, ताकि एक बिखरा हुआ रिकॉर्ड रन को क्रैश न करे।

अपना एपीआई की फ्री योजना पर प्राप्त करें: Scrapeless


आपको क्या मिलता है

json Copy
[
  {
    "quote": "हमने जिस दुनिया का निर्माण किया है, वह हमारे विचारों की प्रक्रिया है। इसे हमारे विचारों को बदले बिना नहीं बदला जा सकता।",
    "author": "अल्बर्ट आइंस्टीन"
  },
  {
    "quote": "हमारे विकल्प, हैरी, यह दिखाते हैं कि हम वास्तव में क्या हैं, हमारे क्षमताओं से कहीं अधिक।",
    "author": "जे.के. राउलिंग"
  },
  {
    "quote": "जीवन जीने के केवल दो तरीके हैं। एक ऐसा है जैसे कुछ भी चमत्कार नहीं है। दूसरा ऐसा है जैसे सब कुछ चमत्कार है।",
    "author": "अल्बर्ट आइंस्टीन"
  }
]
// आकार स्टेप 3 निष्कर्षण को दर्शाता है; मान उदाहरणीय नमूने हैं।

इस पाइपलाइन को चलाने से कुछ ईमानदार अवलोकन:

  • JS-रेन्डर्ड पृष्ठों के लिए क्लाउड ब्राउज़र की आवश्यकता है। https://quotes.toscrape.com/js/ का एक साधारण HTTP खोज 0 पंक्तियाँ लौटाता है; केवल क्लाउड ब्राउज़र, जो cdp_url के माध्यम से पहुँचा जाता है, जावास्क्रिप्ट को निष्पादित करता है ताकि Scrapling इसे पार्स कर सके।
  • network_idle=True हाइड्रेशन की प्रतीक्षा करता है। यह नेटवर्क के स्थिर होने तक रुका रहता है, जो उन पृष्ठों पर महत्वपूर्ण है जो पहले पेंट के बाद अपनी सामग्री लाते हैं।
  • अनुकूली चयनकर्ताओं से टूटने में कमी आती है, सत्यापन में नहीं। ये मामूली DOM परिवर्तन को सोख लेते हैं, लेकिन एक बड़े पुनः डिज़ाइन के बाद आपको अभी भी चयनकर्ता खोज को फिर से चलाना चाहिए और आउटपुट की पुष्टि करनी चाहिए।
  • भू-बाधित पृष्ठों के लिए proxy_country को पिन करें। मूल्य, उपलब्धता, और सहमति दीवारें क्षेत्र के अनुसार भिन्न होती हैं; proxy_country सेट करना परिणामों को उस स्थान के साथ संगत रखता है जिसका आप लक्ष्य बना रहे हैं।
  • स्थैतिक पृष्ठों को इनमें से किसी की आवश्यकता नहीं है। यदि Fetcher.get पहले से ही डेटा लौटाता है, तो इसका उपयोग करें - केवल तब क्लाउड ब्राउज़र पर चढ़ें जब HTTP खाली या ब्लॉक हो जाए।
  • अस्थायी टनल और 5xx त्रुटियाँ पुनः प्रयास योग्य हैं। एक बार का ERR_TUNNEL_CONNECTION_FAILED या 500 आमतौर पर नेटवर्क शोर होता है, आपके कोड में कोई दोष नहीं - बैकऑफ़ के साथ पुनः प्रयास करें।

निष्कर्ष: हल्का फ़ेचर पहले, जब अवरुद्ध होता है तो क्लाउड ब्राउज़र

पाइपलाइन तीन मूव्स में समाहित होती है। काम करने वाले सबसे हल्के फ़ेचर का चयन करें - स्थैतिक HTML के लिए Fetcher.get। जब कोई पृष्ठ खाली, ब्लॉक या भू-गेट होता है, तो Scrapelling के cdp_url को session.browser_ws_endpoint पारित करके Scrapeless स्क्रैपिंग ब्राउज़र तक बढ़ाएं। फिर अनुकूली चयनकर्ताओं के साथ पार्स करें ताकि निष्कर्षण अगले लेआउट परिवर्तन को सहन कर सके। आप केवल तब क्लाउड ब्राउज़र के लिए भुगतान करते हैं जब आपको वास्तव में इसकी आवश्यकता होती है - देखें Scrapeless मूल्य निर्धारण फ्री टियर में क्या शामिल है - और आपके अन्य कोड में सामान्य Scrapling बना रहता है।

यहां से, वही cdp_url पैटर्न बड़े सिस्टम में प्लग करता है। क्लाउड रेंडरिंग को एक एजेंट में तार करने के लिए LangChain + Scrapeless गाइड देखें, और एक पूर्ण साइट बनाने के लिए Etsy स्क्रैपर वॉकथ्रू देखें। जहाज से पहले: SCRAPELESS_API_KEY निर्यात करें, कोई भी भू-बाधित पृष्ठ के लिए proxy_country पिन करें, प्रति होस्ट ≤3 सत्रों पर संवहन बनाए रखें, और अनुपस्थित क्षेत्रों को नल योग्य मानें।


सामान्य प्रश्न

क्या वेब स्क्रैपिंग कानूनी है?

सार्वजनिक रूप से उपलब्ध डेटा को स्क्रैप करना कई न्यायालयों में सामान्यतः अनुमेय है, लेकिन कानून एक समान नहीं है। प्रत्येक साइट की सेवा की शर्तों की समीक्षा करें, व्यक्तिगत या कॉपीराइट डेटा इकट्ठा करने से बचें जिससे आपको कोई अधिकार नहीं है, और याद रखें कि नियमों में न्यायालय के अनुसार भिन्नता होती है। जब संदेह हो, तो अपने विशेष उपयोग पर कानूनी सलाह लें।

क्या आपको प्रॉक्सी की आवश्यकता है?

स्केल पर किसी भी चीज़ के लिए, हाँ। आवासीय निकासी डाटा केंद्र IP की तुलना में ब्लॉकों को तेज़ी से काटती है, और यह उन पृष्ठों के लिए आवश्यक है जो क्षेत्र के अनुसार सामग्री को गेट करते हैं। स्क्रैपलेस 195+ देशों में आवासीय प्रॉक्सी प्रदान करता है - जब आप एक सत्र बना रहे हैं तो proxy_country सेट करें, या एक प्रॉक्सी गेटवे के माध्यम से रूट करें - ताकि आपको खुद IP स्रोत करने और रोटेट करने की आवश्यकता न पड़े।

आपको क्लाउड ब्राउज़र की आवश्यकता कब है बनाम लोकल स्क्रैप्लिंग?

जब Fetcher.get डेटा लौटाता है, तो स्थानीय रहें - यह सबसे तेज़ मार्ग है। जब पृष्ठ ग्राहक-पक्ष जावास्क्रिप्ट में भारी हो, एक उन्नत बॉट प्रबंधक द्वारा आगे बढ़ाया गया हो, या भू-प्रतिबंधित हो, तो cdp_url के माध्यम से स्क्रैपलेस क्लाउड ब्राउज़र पर बढ़ें। क्लाउड ब्राउज़र JS चलाता है और एक स्थानीय फेच से मेल नहीं खा सके ऐसी एंटी-डिटेक्शन और आवासीय निकासी लागू करता है।

आप बार-बार ERR_TUNNEL_CONNECTION_FAILED या 5xx त्रुटियाँ क्यों देख रहे हैं?

मुकाबला करें। ये अस्थायी कनेक्ट त्रुटियाँ हैं, आपकी स्क्रिप्ट में बग नहीं हैं। फेच को पुनः प्रयास चक्र में लपेटें जिसमें विकासात्मक बैकऑफ और एक समझदारी की सीमा हो; इनमें से अधिकांश दूसरी या तीसरी प्रयास पर स्पष्ट हो जाते हैं।

मेरी चयनकर्ता साइट के पुनः डिज़ाइन के बाद टूट गई। आप इसे कैसे ठीक करते हैं?

एडैप्टिव चयनकर्ताओं (adaptive=True के साथ adaptive_domain=...) को चालू करें ताकि स्क्रैप्लिंग संरक्षित तत्वों को छोटे DOM परिवर्तन के जरिए फिर से स्थानांतरित कर सके। बड़े पुनः डिज़ाइन के बाद, अपने चयनकर्ता खोज को फिर से चलाएँ ताकि नए मार्कअप की पुष्टि हो सके, फिर एडैप्टिव मोड को फिर से लाइन बनाए रखने दें।

क्या किसी सहसंबंधी सीमाएं हैं जो आपको सम्मानित करनी चाहिए?

प्रत्येक होस्ट पर ≤3 क्लाउड-ब्राउज़र सत्र रखें। इसके परे, आप कुछ थ्रूपुट को बहुत सी दर-सीमांकन और कनेक्शन रीसेट के लिए व्यापार करते हैं। एक सीमित सहसंबंधिता और एक कतार का उपयोग करें बजाय हर अनुरोध को एक साथ फायर करने के।

स्क्रैप्लिंग अपना खुद का MCP भेजता है (pip install "scrapling[ai]") — यह इसके साथ कैसे संबंधित है?

आप दोनों को लेयर कर सकते हैं। स्क्रैप्लिंग का MCP स्थानीय लाइब्रेरी पर AI एजेंट का प्रत्यक्ष नियंत्रण देता है; स्क्रैपलेस MCP सर्वर उस एजेंट को एंटी-डिटेक्शन और आवासीय प्रॉक्सियों के साथ क्लाउड रेंडरिंग देता है। इन्हें एक साथ उपयोग करें, या उस एक का चयन करें जो आपकी स्टैक के साथ मेल खाता है। यह गाइड लाइब्रेरी पथ लेता है - स्क्रैप्लिंग cdp_url के माध्यम से स्क्रैपलेस क्लाउड ब्राउज़र को चला रहा है - जो एकल तर्क और कोई अतिरिक्त सर्वर चलाने तक सीमित रखता है।


क्या आप अपने AI-संचालित डेटा पाइपलाइन का निर्माण करने के लिए तैयार हैं?

हमारे समुदाय में शामिल हों ताकि एक मुफ्त योजना का दावा करें और डेवलपर्स के साथ संपर्क करें जो स्क्रैप्लिंग + स्क्रैपलेस डेटा पाइपलाइनों का निर्माण कर रहे हैं: Discord · Telegram

Scrapeless पर साइन अप करें मुफ्त स्क्रैपिंग ब्राउज़र रनटाइम के लिए और ऊपर दिए गए पैटर्न को अपने पाइपलाइन की आवश्यकता वाले पृष्ठों और क्षेत्रों के अनुसार अनुकूलित करें। पूरी जानकारी के लिए docs.scrapeless.com पर जाएं।

स्क्रैपलेस में, हम केवल सार्वजनिक रूप से उपलब्ध डेटा का उपयोग करते हैं, जबकि लागू कानूनों, विनियमों और वेबसाइट गोपनीयता नीतियों का सख्ती से अनुपालन करते हैं। इस ब्लॉग में सामग्री केवल प्रदर्शन उद्देश्यों के लिए है और इसमें कोई अवैध या उल्लंघन करने वाली गतिविधियों को शामिल नहीं किया गया है। हम इस ब्लॉग या तृतीय-पक्ष लिंक से जानकारी के उपयोग के लिए सभी देयता को कोई गारंटी नहीं देते हैं और सभी देयता का खुलासा करते हैं। किसी भी स्क्रैपिंग गतिविधियों में संलग्न होने से पहले, अपने कानूनी सलाहकार से परामर्श करें और लक्ष्य वेबसाइट की सेवा की शर्तों की समीक्षा करें या आवश्यक अनुमतियाँ प्राप्त करें।

सबसे लोकप्रिय लेख

सूची