Scarnox · Blog

JavaScript से रेंडर होने वाली वेबसाइट कैसे स्क्रैप करें

कई आधुनिक साइटें लगभग खाली HTML दस्तावेज़ भेजती हैं और कंटेंट ब्राउज़र में JavaScript से बनाती हैं। अगर आपका स्क्रैपर पेज लाता है और उसमें कोई प्रोडक्ट, कीमत या लेख का टेक्स्ट नहीं मिलता, तो कंटेंट मौजूद है, बस बाद में पहुंचता है। यह गाइड दिखाती है कि आपके पास किस तरह का पेज है यह कैसे पहचानें, जहां संभव हो वहां ब्राउज़र से तेज़ रास्ता कैसे खोजें, और Python में Playwright से रेंडर्ड पेज कैसे स्क्रैप करें। अंत में एक नोट है कि जब रेंडर्ड पेज कैप्चा दिखाए तो क्या करें।

चरण 1: जांचें कि कंटेंट HTML में है या नहीं

अपने ब्राउज़र में view-source: के साथ पेज खोलें, या सादी HTTP रिक्वेस्ट से लाएं, और स्रोत में स्क्रीन पर दिख रहा कोई टेक्स्ट खोजें। तीन नतीजे आम हैं:

चरण 2: यदि मौजूद हो तो JSON एंडपॉइंट कॉल करें

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

चरण 3: ज़रूरत हो तो पेज रेंडर करें

अगर कंटेंट सचमुच ब्राउज़र मांगता है, तो एक headless ब्राउज़र चलाएं। Python के लिए Playwright एक अच्छा विकल्प है। नीचे का उदाहरण एक प्रोडक्ट लिस्टिंग खोलता है, कंटेंट के दिखने का इंतज़ार करता है, और हर कार्ड से टेक्स्ट पढ़ता है:

from playwright.sync_api import sync_playwright

URL = "https://example.com/products"  # एक पेज जिसे स्क्रैप करने की आपको अनुमति है

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    page.goto(URL, wait_until="domcontentloaded", timeout=60_000)
    # उस एलिमेंट का इंतज़ार करें जो साबित करे कि डेटा पहुंच गया है।
    page.wait_for_selector(".product-card", timeout=30_000)
    titles = page.locator(".product-card h2").all_inner_texts()
    browser.close()

for title in titles:
    print(title)

किसी खास selector का इंतज़ार करना फिक्स्ड sleep से कहीं ज़्यादा भरोसेमंद है। फिक्स्ड विराम धीमे दिन पर बहुत छोटा होता है, या तेज़ दिन पर समय बर्बाद करता है। वह एलिमेंट चुनें जो डेटा लोड होने के बाद ही दिखता है।

चरण 4: इंफ़िनिट स्क्रॉल और पेजिनेशन संभालें

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

def scroll_until_done(page, selector: str, max_rounds: int = 20) -> int:
    previous = -1
    for _ in range(max_rounds):
        count = page.locator(selector).count()
        if count == previous:
            break
        previous = count
        page.mouse.wheel(0, 4000)
        page.wait_for_timeout(1500)  # अगले बैच को लोड होने का समय दें
    return previous

चरण 5: ब्राउज़र को किफ़ायती रखें

रेंडरिंग महंगी है। जिन इमेज, फ़ॉन्ट और मीडिया की ज़रूरत न हो उन्हें ब्लॉक करें, और हर पेज के लिए नया ब्राउज़र लॉन्च करने के बजाय कई पेजों के लिए एक ही ब्राउज़र दोबारा इस्तेमाल करें। काम पूरा होने पर पेज और कॉन्टेक्स्ट बंद करें, ताकि लंबे रन में मेमोरी न बढ़े।

def block_heavy_assets(route):
    if route.request.resource_type in ("image", "font", "media"):
        route.abort()
    else:
        route.continue_()

page.route("**/*", block_heavy_assets)

चरण 6: जब रेंडर्ड पेज कैप्चा दिखाए

कभी-कभी रेंडर्ड पेज कोई कंटेंट दिखाने से पहले कैप्चा पेश करता है। अगर वह कैप्चा PopularCaptcha है, जो Scarnox पर लाइव कैप्चा टाइप है, तो पेज से sitekey पढ़ें, टोकन मांगें, और टोकन को उस फॉर्म फ़ील्ड में रखें जिसकी साइट को उम्मीद है। PopularCaptcha Python गाइड उस चरण को समझाती है। बाकी विजेट अभी लाइव नहीं हैं, इसलिए किसी पर योजना बनाने से पहले कैप्चा के प्रकार समझाए गए देखें।

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

ज़िम्मेदारी से स्क्रैप करें

अगले कदम

मुफ्त ट्रायल क्रेडिट के साथ शुरू करें, कार्ड की ज़रूरत नहीं: खाता बनाएं और अपने किसी पेज पर PopularCaptcha फ्लो आज़माएं। मौजूदा दरों के लिए प्राइसिंग पेज देखें।