🎯 कस्टमाइज़ करने योग्य, डिटेक्शन-प्रतिरोधी क्लाउड ब्राउज़र जो स्व-विकसित Chromium द्वारा संचालित है, वेब क्रॉलर और एआई एजेंट्स के लिए डिज़ाइन किया गया। 👉अभी आज़माएं
वापस ब्लॉग पर

Nाटककार + स्क्रेपलेस स्क्रेपिंग ब्राउज़र: छुपा हुआ JSON API इंटरसेप्ट करें

Alex Johnson
Alex Johnson

Senior Web Scraping Engineer

29-Jul-2026

एक पृष्ठ जो "उद्धरण" कहता है, शून्य उद्धरण भेजता है। https://quotes.toscrape.com/scroll को एक सामान्य HTTP क्लाइंट के साथ अनुरोध करें और प्रतिक्रिया बॉडी में एक खाली <div class="quotes"></div> होता है - वास्तव में टेक्स्ट, लेखक और टैग बाद में आते हैं, एक GET /api/quotes?page=N कॉल के माध्यम से पृष्ठ का अपना जावास्क्रिप्ट लोड और हर स्क्रॉल पर चलता है। उस कॉल को सीधे पढ़ना, बजाय इसके कि एक ब्राउज़र को इसे एचटीएमएल में रेंडर करने की प्रतीक्षा करें और फिर एचटीएमएल को वापस पार्स करें, नेटवर्क अनुरोध इंटरसेप्शन है: क्रोम डेव टूल्स प्रोटोकॉल के जरिए एक असली ब्राउज़र से कनेक्ट करें, यह जो ट्रैफिक बनाता है उसे सुनें, और JSON पढ़ें जो साइट पहले से ही अपने लिए उत्पन्न करती है।

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

डॉम के बजाय वायर क्यों पढ़ें

quotes.toscrape.com/scroll एक सार्वजनिक स्क्रैपिंग-प्रैक्टिस लक्ष्य है जो विशेष रूप से अनंत स्क्रॉल का प्रदर्शन करने के लिए बनाया गया है, और इसका मार्कअप इंटरसेप्शन का मामला खुद बनाता है। पृष्ठ को डाउनलोड करें और डेटा की तलाश करें:

bash Copy
curl -s https://quotes.toscrape.com/scroll | grep -o 'class="quote"' | wc -l

यह हर बार शून्य लौटाता है, क्योंकि उद्धरण कभी भी एचटीएमएल में नहीं रहते जो सर्वर भेजता है। एक छोटा जक्वेरी ब्लॉक लोड पर $.get('/api/quotes', {page: page}) को एक बार कॉल करता है और फिर जब स्क्रॉल पोजीशन नीचे के करीब होती है तो दोबारा, फिर लौटाए गए पंक्तियों को हाथ से खाली कंटेनर में जोड़ता है। एक ब्राउज़र जो जावास्क्रिप्ट चलाता है और पर्याप्त देर तक इंतजार करता है, अंततः अपने डॉम में हर पृष्ठ पर समान 10 उद्धरण दिखाएगा - लेकिन जब आप .quote तत्वों की गिनती करके <span class="text"> और <small class="author"> नोड्स से टेक्स्ट निकालने के लिए वापस आएंगे, तो आपने एक हाथ से डेटा को फिर से बनाया है जिसे पृष्ठ पहले से ही साफ, टाइप किए गए JSON के रूप में रखता है: एक quotes एरे, प्रत्येक के साथ text, एक author ऑब्जेक्ट, और एक tags सूची, साथ ही एक has_next ध्वज जो आपको बताता है कि कब ठीक से रुकना है। प्रतिक्रिया को सीधे पढ़ना पुनर्निर्माण चरण को छोड़ देता है और आपको नोड्स के बजाय फ़ील्ड देता है।

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

आपको Python 3.9 या नया चाहिए - playwright 1.59.0 ने PyPI पर Requires-Python >=3.9 घोषित किया है - playwright पैकेज स्वयं और app.scrapeless.com पर नि:शुल्क योजना से एक स्क्रैपलेस एपीआई कुंजी चाहिए। कुंजी स्क्रैपिंग ब्राउज़र के सीडीपी एंडपॉइंट पर token क्वेरी पैरामिटर के रूप में चलती है, इसलिए इसे अपने स्क्रिप्ट में किसी सच्चे के बजाय एक पर्यावरण चर में रखें। स्थानीय क्रोम इंस्टॉल की आवश्यकता नहीं है: connect_over_cdp एक ऐसे ब्राउज़र से संपर्क करता है जो पहले से ही बादलों में मौजूद है।

प्लेव्राइट को स्क्रैपिंग ब्राउज़र से सीडीपी के जरिए कनेक्ट करें

क्लाइंट को इंस्टॉल करें और कुंजी सेट करें:

bash Copy
pip install playwright
bash Copy
export SCRAPELESS_API_KEY="your_scrapeless_api_key"

स्क्रैपिंग ब्राउज़र का सीडीपी एंडपॉइंट wss://browser.scrapeless.com/api/v2/browser है, जिसे तीन क्वेरी पैरामीटर - token, sessionTTL, और proxyCountry - के साथ पहुँचाया जाता है - यही निर्माता हर प्लेव्राइट-ओवर-स्क्रैपिंग-ब्राउज़र स्क्रिप्ट इस श्रृंखला में उपयोग करता है:

python Copy
import os
from urllib.parse import urlencode

API_KEY = os.environ["SCRAPELESS_API_KEY"]

def scraping_browser_url(proxy_country="US", session_ttl=180):
    params = urlencode({
        "token": API_KEY,
        "sessionTTL": session_ttl,
        "proxyCountry": proxy_country,
    })
    return f"wss://browser.scrapeless.com/api/v2/browser?{params}"

chromium.connect_over_cdp(scraping_browser_url()) एक मानक प्लेव्राइट Browser ऑब्जेक्ट लौटाता है। नीचे दिए गए इंटरसेप्शन पैटर्न में से कुछ भी स्क्रैपिंग-ब्राउज़र-विशिष्ट नहीं है - वे किसी भी सीडीपी-रिकैच योग्य क्रोमियम के खिलाफ चलते हैं - लेकिन उन्हें स्क्रैपिंग ब्राउज़र पर चलाना का मतलब है कि रेंडर उस इन्फ्रास्ट्रक्चर पर होता है जो पहले से ही आवासीय निकासी और एंटी-डिटेक्शन क्रोमियम ले जाता है, इसलिए साइटों जो आक्रामक रूप से फिंगरप्रिंट करती हैं, फिर भी सामान्य रूप से हाइड्रेट होती हैं जबकि आप उनका ट्रैफिक पढ़ते हैं।

प्रतिक्रिया श्रोता के साथ छिपी हुई एपीआई को कैप्चर करें

प्लेव्राइट का page.expect_response() प्रतीक्षा को उस क्रिया से बांधता है जो इसे सक्रिय करती है - कोई मनमाना नींद नहीं, कोई चयनकर्ता की संख्या की निगरानी नहीं जब तक कि वह स्थिर न लगने लगे। पहले /api/quotes कॉल के लिए इसे page.goto() के चारों ओर बांधें, फिर दूसरे को सक्रिय करने वाले स्क्रॉल के चारों ओर:

python Copy
import os
from urllib.parse import urlencode
from playwright.sync_api import sync_playwright

API_KEY = os.environ["SCRAPELESS_API_KEY"]

def scraping_browser_url(proxy_country="US", session_ttl=180):
    params = urlencode({
        "token": API_KEY,
        "sessionTTL": session_ttl,
        "proxyCountry": proxy_country,
    })
    return f"wss://browser.scrapeless.com/api/v2/browser?{params}"

with sync_playwright() as p:
    browser = p.chromium.connect_over_cdp(scraping_browser_url())
    page = browser.new_page()

    with page.expect_response("**/api/quotes*") as first_page:
        page.goto("https://quotes.toscrape.com/scroll", wait_until="domcontentloaded")
    data = first_page.value.json()
python Copy
print("पहली प्रतिक्रिया लैंड होने से पहले DOM उद्धरण संख्या:", page.locator(".quote").count())
    print(f"कैच की गई पृष्ठ {data['page']} -> {len(data['quotes'])} उद्धरण, has_next={data['has_next']}")

    with page.expect_response("**/api/quotes*") as second_page:
        page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
    data = second_page.value.json()
    print("स्क्रॉल के स्थिर होने के बाद DOM उद्धरण संख्या:", page.locator(".quote").count())
    print(f"कैच की गई पृष्ठ {data['page']} -> {len(data['quotes'])} उद्धरण, has_next={data['has_next']}")

    browser.close()

लाइव साइट पर चलाने पर प्रिंट होता है:

text Copy
पहली प्रतिक्रिया लैंड होने से पहले DOM उद्धरण संख्या: 10
कैच की गई पृष्ठ 1 -> 10 उद्धरण, has_next=True
स्क्रॉल के स्थिर होने के बाद DOM उद्धरण संख्या: 20
कैच की गई पृष्ठ 2 -> 10 उद्धरण, has_next=True

ग्लोब पैटर्न "**/api/quotes*" URL आकृति द्वारा अंत बिंदु से मेल खाता है, जो Playwright के दस्तावेजित पैटर्न के लिए विशिष्ट नेटवर्क प्रतिक्रिया की प्रतीक्षा करना है न कि निश्चित समय सीमा। क्योंकि प्रतीक्षा उस ट्रिगर क्रिया से बंधी है, data['page'], data['quotes'], और data['has_next'] उसी प्रकार के पायथन मूल्यों के रूप में वापस आते हैं जिन्हें साइट की अपनी स्क्रिप्ट उपभोग करती है — कोई <small> टैग से पुनर्निर्मित .author.name, कोई एंकर टेक्स्ट से पुनर्निर्मित टैग सूची नहीं।

नीचे जाएं: CDP नेटवर्क डोमेन के साथ कच्चे फ़्रेम पढ़ें

Playwright की प्रतिक्रिया घटनाएं Chrome DevTools प्रोटोकॉल नेटवर्क डोमेन के शीर्ष पर हैं, और आप CDPSession के माध्यम से उस डोमेन से सीधे बात कर सकते हैं। जब आप पूरी तरह से Playwright को संचालित नहीं कर रहे हों तो इसका महत्व है — किसी अन्य भाषा में एक बिना प्रदूषित CDP क्लाइंट, ऐसा उपकरण जो केवल प्रोटोकॉल घटनाओं को उजागर करता है, या एक ऐसा मामला जहां आप प्रतिक्रिया हेडर और समय चाहते हैं जो एक निश्चित बाइंडिंग पेश नहीं करती — क्योंकि Network.responseReceived और Network.getResponseBody उसी तरह से काम करते हैं चाहे कोई भी क्लाइंट पुस्तकालय उनके ऊपर बैठा हो:

python Copy
import os, json
from urllib.parse import urlencode
from playwright.sync_api import sync_playwright

API_KEY = os.environ["SCRAPELESS_API_KEY"]

def scraping_browser_url(proxy_country="US", session_ttl=180):
    params = urlencode({
        "token": API_KEY,
        "sessionTTL": session_ttl,
        "proxyCountry": proxy_country,
    })
    return f"wss://browser.scrapeless.com/api/v2/browser?{params}"

request_ids, bodies = {}, []

with sync_playwright() as p:
    browser = p.chromium.connect_over_cdp(scraping_browser_url())
    page = browser.new_page()
    cdp = page.context.new_cdp_session(page)
    cdp.send("Network.enable")

    def on_response_received(event):
        if "/api/quotes" in event["response"]["url"]:
            request_ids[event["requestId"]] = event["response"]["url"]

    def on_loading_finished(event):
        rid = event["requestId"]
        if rid in request_ids:
            raw = cdp.send("Network.getResponseBody", {"requestId": rid})
            data = json.loads(raw["body"])
            bodies.append((request_ids[rid], data["page"], len(data["quotes"]), data["quotes"][0]["author"]["name"]))

    cdp.on("Network.responseReceived", on_response_received)
    cdp.on("Network.loadingFinished", on_loading_finished)

    page.goto("https://quotes.toscrape.com/scroll", wait_until="domcontentloaded")
    page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
    for _ in range(20):
        if len(bodies) >= 2:
            break
        page.wait_for_timeout(300)

    for url, page_no, count, author in bodies:
        print(f"CDP Network.getResponseBody {url} पर: पृष्ठ={page_no}, उद्धरण={count}, पहला_लेखक={author}")

    browser.close()
text Copy
CDP Network.getResponseBody https://quotes.toscrape.com/api/quotes?page=1 पर: पृष्ठ=1, उद्धरण=10, पहला_लेखक=अल्बर्ट आइंस्टीन
CDP Network.getResponseBody https://quotes.toscrape.com/api/quotes?page=2 पर: पृष्ठ=2, उद्धरण=10, पहला_लेखक=मैरीलिन मुनरो

Network.responseReceived प्रतिक्रिया शुरू होने पर हेडर्स और requestId के साथ फायर होता है; स्वयं शरीर तब तक उपलब्ध नहीं होता जब तक Network.loadingFinished यह पुष्टि नहीं करता कि ट्रांसफर पूरा हो गया है, जो इसीलिए है कि हैंडलर दो घटनाओं में विभाजित होता है बजाय पहले वाले से शरीर पढ़ने के। getResponseBody ठीक वही बाइट्स लौटाता है जो ब्राउज़र ने प्राप्त किया, साथ ही बाइनरी पेलोड्स के लिए एक base64Encoded ध्वज — उस परत का निर्माण जो Playwright का response.json() आपके लिए छुपाता है।

फ्री स्क्रैपिंग ब्राउزر रनटाइम पाने के लिए app.scrapeless.com पर साइन अप करें और ऊपर दिए गए दोनों स्क्रिप्टों को अपने लक्ष्य पर चलाएं।

एक बार आकार पता चलने पर ब्राउज़र छोड़ें

Copy
दोनों उपरोक्त इंटरसेप्शन ने एक ही चीज़ साबित की: `/api/quotes?page=N` एक सार्वजनिक, असत्यापित GET है जो `quotes`, `page`, और `has_next` लौटाता है। एक बार जब आपको उस आकार का पता चल जाता है, तो इसे चलाने के लिए ब्राउज़र की कोई आवश्यकता नहीं होती — एक साधारण HTTP क्लाइंट सीधे पूरी संग्रह में पन्ना दर पन्ना जा सकता है:

```python
import json
import urllib.error
import urllib.request

def fetch_page(n):
    url = f"https://quotes.toscrape.com/api/quotes?page={n}"
    req = urllib.request.Request(url, headers={"User-Agent": "network-interception-demo/1.0"})
    with urllib.request.urlopen(req, timeout=10) as resp:
        if resp.status != 200:
            raise urllib.error.HTTPError(url, resp.status, "unexpected status", resp.headers, None)
        return json.loads(resp.read())

all_quotes, page = [], 1
while True:
    data = fetch_page(page)
    all_quotes.extend(data["quotes"])
    if not data["has_next"]:
        break
    page += 1

print("pages fetched:", page)
print("total quotes:", len(all_quotes))
print("first quote author:", all_quotes[0]["author"]["name"])
print("last quote author:", all_quotes[-1]["author"]["name"])
text Copy
pages fetched: 10
total quotes: 100
first quote author: Albert Einstein
last quote author: George R.R. Martin

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

जब आपको अभी भी ब्राउज़र की आवश्यकता होती है

हर छिपा हुआ अंत बिंदु इतना सहयोगी नहीं होता। कई एक सत्र कुकी की आवश्यकता होती है जिसे सर्वर पहले के पृष्ठ लोड के दौरान सेट करता है, CSRF या साइन-इन अनुरोध टोकन पृष्ठ के जावास्क्रिप्ट बंडल में शामिल होता है, या एक अनुरोध शरीर जो केवल क्लाइंट-साइड में मौजूद स्थिति से बनाया गया है, और कुछ एक WebSocket फ्रेम या GraphQL POST के माध्यम से भेजते हैं न कि REST के आकार के GET के रूप में जैसे कि XMLHttpRequest मानक वर्णन करता है। ऐसी स्थितियों में पिछले अनुभाग में प्रत्यक्ष-रिप्ले चरण लागू नहीं होता है — आप एक प्रमाणन हेडर नहीं बना सकते जिसे आपने कभी कैप्चर नहीं किया — लेकिन इंटरसेप्शन चरण अभी भी लागू होता है। page.expect_response() और CDP Network डोमेन एक पृष्ठ की ट्रैफिक को पढ़ते हैं चाहे जो भी इसे प्रमाणित करे या पेलोड का आकार क्या हो, क्योंकि वे देखते हैं कि ब्राउज़र ने वास्तव में क्या भेजा और प्राप्त किया न कि पहले से किसी विशेष अनुरोध प्रारूप का अनुमान लगाते हैं। उन साइटों पर, हर पृष्ठ के लिए ब्राउज़र को प्रोसेस में रखें: इसे सत्र बनाना, नेविगेशन को चलाना, और आपको जैसे ही प्रत्येक प्रतिक्रिया मिले।

पूर्ण साइट पर लागू समान रेंडर-फिर-नेटवर्क पैटर्न का एक कार्यान्वित उदाहरण देखने के लिए, TikTok स्क्रैपिंग गाइड देखें, जो असली फीड को स्क्रॉल करते हुए उसी तरह टिप्पणी और पोस्ट XHR को कैप्चर करता है।

इंटरसेप्शन एक खोज चरण है जितना कि एक निष्कर्षण चरण। पहली बार जब आप किसी अनजान साइट का उपयोग करते हैं, तो इसके DevTools Network पैनल को खोलें, Fetch/XHR द्वारा फ़िल्टर करें, और पृष्ठ के साथ बातचीत करते समय क्या सक्रिय होता है, यह देखें — वह मैनुअल पास आपको यह बताता है कि page.expect_response() को किस अंत बिंदु से जोड़ना है इससे पहले कि आप कभी भी स्क्रिप्ट लिखें। एक बार जब अंत बिंदु ज्ञात हो जाए, तो ऊपर सब कुछ — उत्तर श्रोता, कच्चा CDP सत्र, और प्रत्यक्ष पुनरावृत्ति — वह ही खोज है जो कोड के रूप में एन्कोड की गई है जो अपने आप चलती है।

app.scrapeless.com पर मुफ्त स्क्रैपिंग ब्राउज़र रनटाइम के लिए साइन अप करें, या स्क्रैपिंग ब्राउज़र उत्पाद पृष्ठ और मूल्य निर्धारण देखें।

अक्सर पूछे जाने वाले प्रश्न

प्रश्न: वेब स्क्रैपिंग में नेटवर्क अनुरोध इंटरसेप्शन क्या है?
यह एक पृष्ठ के अपने जावास्क्रिप्ट द्वारा उत्पन्न XHR/fetch ट्रैफ़िक को पढ़ना है — आमतौर पर एक JSON API कॉल — बजाय इसके कि उस ट्रैफ़िक को HTML में रेंडर करने की प्रतीक्षा की जाए और फिर रेंडर किए गए मार्कअप को वापस पार्स किया जाए।

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

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

प्रश्न: page.expect_response() और कच्चे CDP Network डोमेन को सुनने के बीच क्या अंतर है?
page.expect_response() Playwright का उच्च-स्तरीय लपेटने वाला है: इसे एक URL पैटर्न से बाइंड करें, क्रिया को प्रेरित करें, एक पार्स किया हुआ Response ऑब्जेक्ट वापस प्राप्त करें। CDP Network डोमेन इसके तहत प्रोटोकॉल है - Network.responseReceived और Network.getResponseBody - उपयोगी है जब आप एक Playwright बाइंडिंग का उपयोग नहीं कर रहे हैं, या प्रोटोकॉल-स्तरीय विवरण की आवश्यकता है जो एक विशिष्ट क्लाइंट लाइब्रेरी स्पष्ट नहीं करती है।

प्रश्न: क्या यह उन एंडपॉइंट्स पर काम करता है जो JSON के अलावा कुछ और लौटाते हैं?
दोनों इंटरसेप्शन पैटर्न जो भी बाइट्स प्रतिक्रिया ले जा रही है उसे पढ़ते हैं - Playwright में response.text() या response.body(), CDP में Network.getResponseBody से कच्चा body क्षेत्र - इसलिए HTML अंश, XML, या कोई अन्य पेलोड उसी तरह से गुजरता है। JSON बस एक पृष्ठ की अपनी आंतरिक API के लिए सामान्य मामला है।

प्रश्न: क्या page.expect_response() उन अनुरोधों को पकड़ सकता है जो उस पृष्ठ के लोड होने से पहले चलाए जाते हैं जिसे आप देख रहे हैं?
नहीं - इसे सुनना होना चाहिए इससे पहले कि प्रेरक क्रिया चले, यही कारण है कि यह विशिष्ट page.goto() या इंटरैक्शन को लपेटता है जो अनुरोध का कारण बनता है, न कि इसके बाद संलग्न होने पर।

प्रश्न: क्या इंटरसेप्शन को विशेष रूप से Scrapeless Scraping Browser की आवश्यकता है, या क्या यह किसी भी CDP-आधारित क्रोमियम के साथ काम करता है?
तकनीक स्वंय सामान्य CDP व्यवहार है और किसी भी क्रोमियम के खिलाफ काम करती है जिसे आप connect_over_cdp के माध्यम से पहुंच सकते हैं, स्थानीय या दूरस्थ। इसे Scrapeless Scraping Browser पर चलाने से एंटी-डिटेक्शन क्रोमियम और आवासीय एग्रेस जोड़ता है, जो तब मायने रखता है जब आप जिस लक्षित को इंटरसेप्ट कर रहे हैं वह इतनी आक्रामक तरीके से फिंगरप्रिंट करता है कि एक साधारण स्थानीय ब्राउज़र पहले स्थान पर ट्रैफ़िक उत्पन्न करने के लिए रेंडरिंग से आगे नहीं बढ़ेगा।

प्रश्न: अगर साइट अपना एंडपॉइंट या प्रतिक्रिया का आकार बदलती है तो क्या होता है?
इंटरसेप्शन कोड काम करता रहता है जब तक URL पैटर्न मेल खाता है; एक नामांकित क्षेत्र या संरचित पेलोड को पढ़ने वाला कोड data['quotes'] को तोड़ता है, ठीक उसी तरह जैसे एक CSS चयनकर्ता तब टूटता है जब एक क्लास नाम बदलता है। न तो दृष्टिकोण पुन: डिज़ाइन से प्रतिरक्षित है - API को पढ़ना केवल यह मतलब है कि आप JSON संविदा का ट्रैक रख रहे हैं न कि मार्कअप संरचना का, जो कि आमतौर पर कम बार बदलती है।

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

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

सूची