HTML से डेटा निकालें Python में Respondo द्वारा Scrapeless
Expert in Web Scraping Technologies
TL;DR:
- Respondo Scrapeless के लिए एक ओपन-सोर्स Python पुस्तकालय है जो HTML और JSON को रिकॉर्ड में बदलता है। यह उन पृष्ठों और API प्रतिक्रियाओं पर काम करता है जो आपके पास पहले से हैं, और इसमें कोई रनटाइम निर्भरताएँ नहीं हैं।
- GitHub से संस्करण 0.6 स्थापित करें। PyPI पर
respondoपैकेज अभी भी 0.4.0 पर है, जो फ़ील्ड रेसिपी, JSON लाइन्स हेल्पर्स और बैच मोड से पहले का है। - एक फ़ील्ड रेसिपी प्रत्येक कॉलम को एक चयनकर्ता से जोड़ती है। रेसिपीज़ किसी टेक्स्ट की बजाय एक विशेषता को पढ़ सकती हैं और आपके कोड के बगल में एक JSON फ़ाइल में रह सकती हैं।
- CSV आउटपुट डिफ़ॉल्ट रूप से स्प्रेडशीट-सेफ है। जो मान सूत्रों की तरह शुरू होते हैं, उन्हें एक अपॉस्ट्रॉफ़ प्रिफिक्स मिलता है, और संख्याएँ न्यूमेरिक रहती हैं।
- Respondo पृष्ठों को फ़ेच या रेंडर नहीं करता है। Scrapeless यूनिवर्सल स्क्रैपिंग API HTML एकत्र करता है, और Respondo इसे पंक्तियों में बदलता है।
- संग्रहण चरण को Scrapeless फ्री योजना पर आज़माएँ और कुछ मिनटों में अपना पहला पृष्ठ निकालें।
Python में HTML से डेटा निकालने के लिए, आपको दो चीज़ें चाहिए: स्वयं HTML, और कोड जो टैग्स को उन फ़ील्ड में बदलता है जिनका आप उपयोग कर सकते हैं। दूसरा भाग आमतौर पर एक-बार के लूप और CSV कोड में बढ़ जाता है जो हर साइट के लिए भिन्न होता है।
Respondo उस दूसरे भाग को पैकेज करता है। आप प्रत्येक फ़ील्ड का वर्णन एक बार करते हैं, एक चयनकर्ता के रूप में और एक वैकल्पिक विशेषता के रूप में, और Respondo आपको एक डिक्शनरी की सूची लौटाता है जिसे आप Python या कमांड लाइन से CSV या JSON लाइन्स में लिख सकते हैं। यह गाइड एक सार्वजनिक प्रैक्टिस साइट से एक छोटा पुस्तक सूची बनाता है, फिर संग्रहण चरण के लिए Scrapeless के साथ Respondo को जोड़ता है।
Respondo क्या है
Respondo एक स्थानीय निष्कर्षण उपकरण है जिसे Scrapeless GitHub संगठन के अंतर्गत बनाए रखा जाता है और MIT लाइसेंस के तहत प्रकाशित किया गया है। इसका GitHub पर स्रोत भंडार एक पंक्ति में विभाजन का वर्णन करता है: Scrapeless के साथ संग्रह करें, फिर Respondo के साथ निकालें, रूपांतरित करें और निर्यात करें।
यह पुस्तकालय उस सामग्री पर काम करता है जो आपके पास पहले से है। इसके HTML कार्य मानक पुस्तकालय के html.parser मॉड्यूल पर आधारित हैं, इसलिए स्थापित वातावरण में केवल Respondo स्वयं के अलावा कुछ भी नहीं है। संस्करण 0.6 चार प्रकार के कार्यों को शामिल करता है:
- HTML से दोहराए गए रिकॉर्ड, CSS-शैली के चयनकर्ताओं और पुनर्नवीनीकरण करने योग्य फ़ील्ड रेसिपीज़ का उपयोग करना;
- JSON दस्तावेज़ों पर प्रश्न, समतलीकरण, प्रक्षिप्ति और विलय पैच;
- पृष्ठ सारांश, फ़ीड और साइटमैप्स;
- 21 मोड के साथ एक
respondoकमांड, जिसमें पूरे फ़ोल्डर की बैच प्रोसेसिंग शामिल है।
Respondo URLs को फ़ेच या ब्राउज़र लॉन्च नहीं करता है, और इसमें कोई Scrapeless API क्लाइंट नहीं है। यदि आप अभी भी यह तय कर रहे हैं कि पार्सिंग में क्या शामिल है, तो हमारे डेटा पार्सिंग क्या है के अवलोकन को कवर करता है।
Respondo 0.6 स्थापित करें
Respondo को GitHub से सीधे, एक कमिट पर स्थापित करें। इसे Python 3.9 या बाद के संस्करण की आवश्यकता है:
bash
python -m pip install "git+https://github.com/scrapeless-ai/respondo@be376d112ecf681011a079e809acae46b7e1ff59"
respondo --version
text
respondo 0.6.0
कमिट पिन आपके वातावरण को ठीक उसी कोड पर रखता है जिसके साथ इस गाइड का परीक्षण किया गया था। एक साधारण pip install respondo संस्करण 0.4.0 को PyPI से स्थापित करता है, और नीचे उपयोग की गई फ़ंक्शन इसमें नहीं हैं। इंस्टॉलेशन के बाद, pip list केवल respondo और pip दिखाता है।
एक फ़ील्ड रेसिपी को परिभाषित करें
एक फ़ील्ड रेसिपी एक डिक्शनरी है जो प्रत्येक आउटपुट कॉलम को एक नियम के साथ मानचित्रित करती है जिसे एक दोहराए गए आइटम के अंदर खोजा जा सके। एक साधारण स्ट्रिंग एक चयनकर्ता है जिसका टेक्स्ट मान बनता है। एक डिक्शनरी विकल्प जोड़ती है:
selectorवर्तमान आइटम के अंदर तत्व को खोजता है।attrटेक्स्ट की बजायhrefयाtitleजैसी एक विशेषता को पढ़ता है।required: Trueएक त्रुटि उठाता है जब कोई आइटम मेल नहीं खाता।many: Trueएक सूची लौटाता है, औरdefaultएक लापता मान के लिए एक फ़ॉलबैक सेट करता है।
चयनकर्ता टैग्स, कक्षाओं, आईडी, विशेषता परीक्षणों, वंशज और बच्चा संयोजकों और कॉमा समूहों को कवर करते हैं। यह W3C चयनकर्ता विनिर्देश का एक जानबूझकर उपसमुच्चय है: प्सीudo-क्लास जैसे :nth-child और भाई-बहन संयोजक को ValueError के साथ अस्वीकृत किया गया है, न कि बिना देखे।
रेसिपीज़ एक JSON फ़ाइल में भी रह सकती हैं, जो चयनकर्ताओं को आपके कोड से बाहर रखती है और कमांड लाइन को उनका पुनः उपयोग करने देती है। इसे book-fields.json के रूप में सहेजें:
json
{
"title": {"selector": "h3 a", "attr": "title", "required": true},
"price": ".price_color",
"availability": ".availability",
"url": {"selector": "h3 a", "attr": "href"}
}
title फ़ील्ड जानबूझकर लिंक के title विशेषता को पढ़ता है। प्रैक्टिस साइट पर दृश्य लिंक टेक्स्ट लंबे नामों के लिए संक्षिप्त किया जाता है, जबकि विशेषता पूर्ण शीर्षक को धारण करती है।
रिकॉर्ड निकालें और CSV लिखें
extract_records HTML, दोहराए गए आइटम के लिए एक चयनकर्ता और रेसिपी लेता है, और प्रत्येक आइटम के लिए एक डिक्शनरी लौटाता है। यह उदाहरण प्रैक्टिस साइट के रहस्य श्रेणी से दो आइटम का उपयोग करता है:
python
from respondo import extract_records, normalize_url, records_to_csv
PAGE_URL = "https://books.toscrape.com/catalogue/category/books/mystery_3/index.html"
html = """
<article class="product_pod">
<h3><a href="../../../sharp-objects_997/index.html" title="Sharp Objects">Sharp Objects</a></h3>
<p class="price_color">£47.82</p>
<p class="instock availability"><i class="icon-ok"></i> In stock</p>
</article>
<article class="product_pod">
<h3><a href="../../../in-a-dark-dark-wood_963/index.html" title="In a Dark, Dark Wood">In a Dark, Dark ...</a></h3>
<p class="price_color">£19.63</p>
<p class="instock availability"><i class="icon-ok"></i> In stock</p>
</article>
"""
books = extract_records(html, "article.product_pod", {
"title": {"selector": "h3 a", "attr": "title", "required": True},
"price": ".price_color",
"availability": ".availability",
"url": {"selector": "h3 a", "attr": "href"},
})
for book in books:
book["url"] = normalize_url(book["url"], base=PAGE_URL)
print(records_to_csv(books), end="")
text
title,price,availability,url
Sharp Objects,£47.82,In stock,https://books.toscrape.com/catalogue/sharp-objects_997/index.html
"In a Dark, Dark Wood",£19.63,In stock,https://books.toscrape.com/catalogue/in-a-dark-dark-wood_963/index.html
तीन विवरण आपके लिए संभाले जाते हैं। .availability का पाठ वापस ट्रिम किया जाता है, जिसमें आइकन तत्व नहीं होता। सापेक्ष href एक सापेक्ष URL बन जाता है, जो पृष्ठ पते के खिलाफ हल किया जाता है जिस तरह से URI विनिर्देशन का संदर्भ समाधान नियम वर्णन करता है। और जिस शीर्षक में अल्पविराम होता है, उसे CSV में उद्धृत किया जाता है।
records_to_csv भी स्प्रेडशीट फ़ॉर्मूला इंजेक्शन के खिलाफ सुरक्षा करता है, जो एक जोखिम है जिसे OWASP CSV इंजेक्शन पर प्रविष्टि वर्णन करता है। एक स्ट्रिंग जो =, +, -, @, एक टैब या एक पंक्ति ब्रेक से शुरू होती है, उसके सामने एक अपॉस्ट्रॉफ होता है, इसलिए =HYPERLINK(1) को '=HYPERLINK(1) के रूप में लिखा जाता है, जबकि एक असली संख्या जैसे -5 वैसी ही बनी रहती है। escape_formulas=False केवल तब पास करें जब फ़ाइल कभी स्प्रेडशीट तक न पहुंचे।
और आगे बढ़ें: पृष्ठ संक्षेपण, JSON लाइन्स और CLI
रिकॉर्ड एक आउटपुट हैं। समान पैकेज संपूर्ण पृष्ठों का संक्षेपण भी करता है और JSON लाइन्स को संभालता है, और इसका respondo कमांड शेल से रिकॉर्ड निकालने के लिए चलता है, एक फ़ाइल के लिए या पूरे फ़ोल्डर के लिए।
संपूर्ण पृष्ठ का संक्षेपण
extract_page एक कॉल में दस्तावेज़ का शीर्षक, पाठ, मेटाडेटा, शीर्षक, लिंक, छवियाँ और तालिकाएँ लौटाता है। इसे रहस्य श्रेणी पृष्ठ की सहेजी गई प्रति पर चलाएं:
python
from respondo import extract_page
with open("mystery-page-1.html", encoding="utf-8") as handle:
page = extract_page(
handle.read(),
base="https://books.toscrape.com/catalogue/category/books/mystery_3/index.html",
)
print(sorted(page))
print(page["headings"][:2])
print(len(page["links"]), "links,", len(page["images"]), "images")
text
['headings', 'images', 'links', 'meta', 'tables', 'text', 'title']
[{'level': 1, 'id': '', 'text': 'Mystery'}, {'level': 3, 'id': '', 'text': 'Sharp Objects'}]
95 links, 20 images
पाठ, शीर्षक और लिंक स्क्रिप्ट, शैलियों और दस्तावेज़ के शीर्ष को छोड़ देते हैं, और सापेक्ष लिंक base के खिलाफ हल किए जाते हैं।
JSON लाइन्स पर क्वेरी करें
jsonl_dumps रिकॉर्ड को JSON लाइन्स के रूप में लिखता है, प्रति पंक्ति एक संकुचित वस्तु, और iter_jsonl उन्हें सुस्त रूप से पढ़ता है। json_query तब छोटे पथ भाषा के साथ मान खींचता है जो हमेशा एक सूची वापस लौटाता है:
python
from respondo import iter_jsonl, json_query
with open("mystery-books.jsonl", encoding="utf-8") as handle:
books = list(iter_jsonl(handle))
print(len(books), "records")
print(json_query(books, "$[*].title")[:3])
print(json_query(books, "[-1].price"))
text
20 records
['Sharp Objects', 'In a Dark, Dark Wood', 'The Past Never Ends']
['£20.89']
पथ सिंटैक्स डॉट की, उद्धृत कुंजियाँ, नकारात्मक अनुक्रमांक और * वाइल्डकार्ड को कवर करता है। इसमें कोई फ़िल्टर या पुनरावर्ती अवरोह नहीं है, और एक पथ जो कुछ भी मेल नहीं खाता है, एक खाली सूची लौटाता है।
कमांड लाइन से उसी नुस्खा को चलाएँ
respondo कमांड एक स्थानीय फ़ाइल पढ़ता है और डिफ़ॉल्ट रूप से JSON लिखता है, या CSV और JSON लाइन्स के साथ --format:
bash
respondo records mystery-page-1.html --selector article.product_pod --fields book-fields.json --format csv | head -4
text
title,price,availability,url
Sharp Objects,£47.82,In stock,../../../sharp-objects_997/index.html
"In a Dark, Dark Wood",£19.63,In stock,../../../in-a-dark-dark-wood_963/index.html
The Past Never Ends,£56.50,In stock,../../../the-past-never-ends_942/index.html
records मोड में URLs ठीक वैसे ही रहते हैं जैसे वे पृष्ठ में दिखाई देते हैं, भले ही --base पास किया जाए। जब आपको सापेक्ष लिंक की आवश्यकता हो, तो उन्हें Python में normalize_url के साथ हल करें।
सहेजे गए पृष्ठों के फ़ोल्डर को प्रोसेस करें
बैच मोड एक निर्देशिका में प्रत्येक मेल खाने वाली फ़ाइल पर एक नुस्खा चलाता है, फ़ाइल नाम के क्रम में, और प्रति फ़ाइल एक परिणाम पंक्ति लिखता है:
bash
respondo records responses/ --batch --pattern '*.html' \
--selector article.product_pod --fields book-fields.json \
--format jsonl --output results.jsonl
python -c "import json; [print(row['source'], row['status'], len(row['result'])) for row in map(json.loads, open('results.jsonl'))]"
text
mystery-page-1.html ok 20
mystery-page-2.html ok 12
प्रत्येक पंक्ति source, status, result और error को उठाती है, इसलिए एक अप्रभावी फ़ाइल बाकी को रोकती नहीं है। दो पृष्ठ श्रेणी में सभी 32 पुस्तकों को पकड़ते हैं। बैच मोड कभी अधिलेखित नहीं करता है: उसी कमांड को फिर से चलाने पर respondo: batch output exists के साथ रुकता है और निकासी स्थिति 1 होती है, और इनपुट फ़ोल्डर के अंदर एक आउटपुट पथ को असुरक्षित के रूप में अस्वीकार किया जाता है।
जहां रिस्पॉंडो रुकता है: स्क्रैपलेस के साथ पृष्ठ को इकट्ठा करें
रिस्पॉंडो जो दिया गया है उसे पार्स करता है और कुछ नहीं। यह पृष्ठों को डाउनलोड नहीं करता है या जावास्क्रिप्ट नहीं चलाता है, इसलिए इसके चयनकर्ता केवल वही HTML देखते हैं जो उन्हें प्राप्त होता है। उस कदम के लिए, स्क्रैपलेस यूनिवर्सल स्क्रैपिंग एपीआई एक URL लाता है और पृष्ठ लौटाता है, जिससे दोनों भाग अलग रहते हैं: API कुंजी संग्रहण कॉल की होती है, और निष्कर्ष स्थानीय रूप से चलता है।
क्या आप इसे अब सेट कर रहे हैं? स्क्रैपलेस मुफ्त योजना आपकी पहली अनुरोधों को कवर करती है।
यह स्क्रिप्ट लाइव रहस्य श्रेणी पृष्ठ को unlocker.webunlocker अभिनेता के माध्यम से इकट्ठा करती है, फिर उस पर वही नुस्खा चलाती है। यह आपके कुंजी को SCRAPELESS_API_KEY पर्यावरण चर से पढ़ता है:
python
import json
import os
import urllib.request
from respondo import extract_records, jsonl_dumps, normalize_url, records_to_csv
PAGE_URL = "https://books.toscrape.com/catalogue/category/books/mystery_3/index.html"
BOOK_FIELDS = {
"title": {"selector": "h3 a", "attr": "title", "required": True},
"price": ".price_color",
"availability": ".availability",
"rating": {"selector": "p.star-rating", "attr": "class"},
"url": {"selector": "h3 a", "attr": "href"},
}
def fetch_html(url):
payload = {"actor": "unlocker.webunlocker", "input": {"url": url, "method": "GET", "js_render": False}}
request = urllib.request.Request(
"https://api.scrapeless.com/api/v2/unlocker/request",
data=json.dumps(payload).encode(),
headers={"Content-Type": "application/json", "x-api-token": os.environ["SCRAPELESS_API_KEY"]},
)
with urllib.request.urlopen(request, timeout=120) as response:
body = json.load(response)
if body.get("code") != 200:
raise RuntimeError(f"Scrapeless returned code {body.get('code')}")
return body["data"]
html = fetch_html(PAGE_URL)
books = extract_records(html, "article.product_pod", BOOK_FIELDS)
for book in books:
book["url"] = normalize_url(book["url"], base=PAGE_URL)
book["rating"] = book["rating"].split()[-1]
print(len(books), "books")
print(records_to_csv(books[:3]), end="")
with open("mystery-books.jsonl", "w", encoding="utf-8") as handle:
handle.write(jsonl_dumps(books))
text
20 books
title,price,availability,rating,url
Sharp Objects,£47.82,In stock,Four,https://books.toscrape.com/catalogue/sharp-objects_997/index.html
"In a Dark, Dark Wood",£19.63,In stock,One,https://books.toscrape.com/catalogue/in-a-dark-dark-wood_963/index.html
The Past Never Ends,£56.50,In stock,Four,https://books.toscrape.com/catalogue/the-past-never-ends_942/index.html
API पृष्ठ को एक JSON लिफाफे में लपेटता है, {"code": 200, "data": "<html>…"}, और urlopen एक HTTP विफलता के लिए HTTPError उठाता है इससे पहले कि लिफाफा पढ़ा जाए। रेटिंग p.star-rating की वर्ग सूची से आती है, जिसका अंतिम वर्ग नामों की संख्या के तारे बताता है। यूनिवर्सल स्क्रैपिंग एपीआई आरंभ करने के लिए मार्गदर्शिका अन्य अनुरोध विकल्पों को सूचीबद्ध करता है, जैसे कि प्रॉक्सी देश और पुनर्निर्देश हैंडलिंग।
समस्या समाधान
| आप क्या देखते हैं | कारण | समाधान |
|---|---|---|
ValueError: required field has no matches |
एक आइटम में required के रूप में चिह्नित एक फ़ील्ड की कमी है |
पृष्ठ के खिलाफ चयनकर्ता की जांच करें, या required छोड़ दें और default का उपयोग करें |
ValueError: unsupported selector syntax |
चयनकर्ता ऐसे pseudo-class का उपयोग करता है जैसे :nth-child |
वर्ग, ID या विशेषता द्वारा चयन करें |
ValueError: expected a tag, class, ID or attribute selector |
चयनकर्ता + या ~ का उपयोग करता है |
वंशज या बाल संयोजक का उपयोग करें |
| हर पंक्ति के लिए एक कॉलम खाली है | सामग्री को लोड के बाद JavaScript द्वारा जोड़ा गया है | js_render सक्षम करके पृष्ठ का अनुरोध करें |
| CLI आउटपुट में सापेक्ष URL | records मोड विशेषता मानों को जैसा है वैसा रखता है |
उन्हें Python में normalize_url के साथ हल करें |
| कुछ CSV मानों से पहले एक अपोस्ट्रोफ | सूत्र का एस्केपिंग डिफ़ॉल्ट रूप से चालू है | इसे रखें, या विश्वसनीय उपभोक्ताओं के लिए escape_formulas=False पास करें |
respondo: batch output exists |
आउटपुट फ़ाइल पहले से मौजूद है | एक नया फ़ाइल नाम चुनें |
respondo: batch unsafe output path |
आउटपुट फ़ाइल इनपुट फ़ोल्डर के अंदर है | परिणाम कहीं और लिखें |
वे पृष्ठों के लिए जो अपना सामग्री ब्राउज़र में बनाते हैं, यूनिवर्सल स्क्रैपिंग एपीआई के साथ पृष्ठों को रेंडर करना विकल्पों के माध्यम से चलता है, और JS रेंडर दस्तावेज़ीकरण पैरामीटर सूचीबद्ध करता है। मूल्य निर्धारण की जांच करें कि रेंडर किए गए अनुरोधों की लागत क्या है।
निष्कर्ष
Respondo एक स्क्रैपिंग कार्य के निष्कर्षण आधे को कॉन्फ़िगरेशन में बदल देता है: दोहराए गए आइटम के लिए एक चयनकर्ता और इसके क्षेत्रों के लिए एक नुस्खा। वहां से, extract_records ड Dictionaries लौटाता है जो records_to_csv या jsonl_dumps फ़ाइलों में बदलता है। respondo आदेश एक फ़ोल्डर में उसी नुस्खा को चलाता है और प्रत्येक पृष्ठ के लिए एक परिणाम रिपोर्ट करता है।
दो आधों को अलग रखें। GitHub से 0.6 स्थापित करें, यूनिवर्सल स्क्रैपिंग एपीआई के साथ पृष्ठ संकलित करें, और Respondo को उस पर काम करने दें जो लौटता है, बिना किसी नेटवर्क कनेक्शन या अपने स्वयं के क्रेडेंशियल के।
क्या आप Respondo को असली पृष्ठ डेटा देने के लिए तैयार हैं? Scrapeless मुफ्त योजना से शुरू करें और अपना पहला पृष्ठ एकत्र करें।
एफएक्यू
प्रश्न: Respondo क्या है?
Respondo Scrapeless से एक ओपन-सोर्स पायथन लाइब्रेरी है जो HTML और JSON से डेटा को निकालती है, रूपांतरित करती है और निर्यात करती है जो आपके पास पहले से ही है। इसमें कोई रनटाइम निर्भरता नहीं है और यह पूरी तरह से आपकी मशीन पर चलती है।
प्रश्न: मैं Respondo 0.6 कैसे स्थापित करूं?
इसे GitHub से python -m pip install "git+https://github.com/scrapeless-ai/respondo@be376d112ecf681011a079e809acae46b7e1ff59" के साथ स्थापित करें। PyPI पैकेज 0.4.0 पर है और इसमें इस मार्गदर्शिका की सुविधाएं नहीं हैं।
प्रश्न: क्या Respondo वेब पृष्ठों को डाउनलोड कर सकता है?
नहीं। Respondo केवल सामग्री को पार्स करता है जिसे आप इसे देते हैं। डाउनलोड चरण के लिए Scrapeless Universal Scraping API, या HTML का कोई अन्य स्रोत का उपयोग करें।
प्रश्न: मैं Respondo के साथ पायथन में HTML से CSV में डेटा कैसे निकालूं?
extract_records को HTML, दोहराए गए आइटम के लिए एक चयनकर्ता और एक क्षेत्र नुस्खा के साथ कॉल करें, फिर परिणाम को records_to_csv में पास करें। शेल से, respondo records page.html --selector … --fields recipe.json --format csv वही करता है।
प्रश्न: Respondo किन CSS चयनकर्ताओं का समर्थन करता है?
टैग, वर्ग, ID, विशेषता परीक्षण, वंशज और बाल संयोजक, और अल्ट्रा समूह। प्सरु क्लासेस और भाई संयोजक ValueError उठाते हैं।
प्रश्न: मेरे CSV में कुछ मानों के सामने अपोस्ट्रोफ क्यों है?
Respondo उन स्ट्रिंग्स को प्रीफिक्स करता है जो =, +, -, @, एक टैब या एक लाइन ब्रेक से शुरू होती हैं, ताकि स्प्रेडशीट उन्हें सूत्रों के रूप में न चलाए। संख्याओं को अकेला छोड़ दिया जाता है, और escape_formulas=False प्रीफिक्स को बंद कर देता है।
प्रश्न: क्या Respondo JavaScript के साथ रेंडर किए गए पृष्ठों को संभालता है?
Respondo HTML को पार्स करता है जो उसे प्राप्त होता है और स्क्रिप्ट नहीं चलाता। ऐसे पृष्ठों को यूनिवर्सल स्क्रैपिंग API में JavaScript रेंडरिंग सक्षम करके लाएं, फिर रेंडर किए गए HTML को Respondo में पास करें।
स्क्रैपलेस में, हम केवल सार्वजनिक रूप से उपलब्ध डेटा का उपयोग करते हैं, जबकि लागू कानूनों, विनियमों और वेबसाइट गोपनीयता नीतियों का सख्ती से अनुपालन करते हैं। इस ब्लॉग में सामग्री केवल प्रदर्शन उद्देश्यों के लिए है और इसमें कोई अवैध या उल्लंघन करने वाली गतिविधियों को शामिल नहीं किया गया है। हम इस ब्लॉग या तृतीय-पक्ष लिंक से जानकारी के उपयोग के लिए सभी देयता को कोई गारंटी नहीं देते हैं और सभी देयता का खुलासा करते हैं। किसी भी स्क्रैपिंग गतिविधियों में संलग्न होने से पहले, अपने कानूनी सलाहकार से परामर्श करें और लक्ष्य वेबसाइट की सेवा की शर्तों की समीक्षा करें या आवश्यक अनुमतियाँ प्राप्त करें।



