ग्रोको वेब स्क्रैपिंग: एक व्यावहारिक पायथन गाइड
Lead Scraping Automation Engineer
TL;DR:
- Grok का API OpenAI की तरह बोलता है, जो इसे एक ड्रॉप-इन एक्सट्रैक्शन इंजन बनाता है। आधिकारिक OpenAI Python SDK को
https://api.x.ai/v1पर निर्देशित करें और मॉडल पृष्ठ पाठ को JSON रिकॉर्ड में बदल देता है जिसमेंtemperature=0औरresponse_format={"type": "json_object"}होता है। - Grok जो नहीं करता है वह है फ़ेच। मॉडल में कोई ब्राउज़र और न ही कोई सत्र होता है; xAI का सर्वर-साइड वेब-खोज उपकरण जवाबों को लाइव परिणामों के साथ आधार प्रदान करता है, और बड़े पैमाने पर पृष्ठ निकासी आपका काम है।
- फर्क एक स्क्रिप्ट में स्पष्ट है। एक साधारण GET एक JavaScript-निर्मित डेमो पृष्ठ पर 0 उद्धरण तत्व प्रस्तुत करता है; Scrapeless Universal Scraping API के माध्यम से वही URL जिसमें
js_renderहोता है, सभी 10 प्रस्तुत करता है — और वही निर्मित HTML है जिससे Grok निकालता है। - यह गाइड असली निकासी है, काल्पनिक नहीं। निर्मित पृष्ठ के खिलाफ एक लाइव रन ने सभी 10 उद्धरणों को लेखकों और टैग सरणियों के साथ intact लौटाया — पूरे कॉल के लिए 3,211 टोकन।
- अभी तक कोई xAI कुंजी नहीं? एक समान अनुरोध OpenRouter के माध्यम से चलता है। वही OpenAI SDK, अलग
base_urlऔर मॉडल स्ट्रिंग; यह गाइड दोनों रास्तों को दिखाती है। - फेच साइड पर शुरू करने के लिए स्वतंत्र। app.scrapeless.com पर अपनी Scrapeless API कुंजी बनाएं।
क्या Grok वेबसाइटें स्क्रैप कर सकता है?
Grok एक पृष्ठ पढ़ सकता है जिसे आप उसे देते हैं और ठीक वही फ़ील्ड लौटाता है जिनकी आप मांग करते हैं; यह उस पृष्ठ को स्क्रैपिंग मात्रा में नहीं ले जा सकता। ये हर "Grok वेब स्क्रैपिंग" सेटअप के दो हिस्से हैं, और इन्हें भ्रमित करना परियोजनाओं को रोकता है। xAI API एक भाषा मॉडल को उजागर करता है — जो असाधारण रूप से सरलता से कनेक्ट होने वाला है, क्योंकि अंतिम बिंदु OpenAI के समान अनुरोध रूप को स्वीकार करता है — लेकिन HTTP फ़ेचिंग, JavaScript रेंडरिंग, सत्र राज्य, और पहुंच चुनौतियाँ इसके बाहर रहती हैं।
xAI एक सर्वर-साइड वेब-खोज उपकरण भी भेजता है, और यह एक ईमानदार वाक्य का हकदार है: यह Grok को सवालों के जवाब देने के लिए लाइव वेब को खोजने और पढ़ने की अनुमति देता है। यह प्रश्न-उत्तर के लिए पुनर्प्राप्ति है। यह आपको यह नियंत्रण नहीं देता कि कौन से पृष्ठ हासिल किए जाते हैं, वे कैसे रेंडर होते हैं, या आप कितने संसाधित कर सकते हैं — ये तीन चीजें एक स्क्रैपिंग पाइपलाइन पर आधारित हैं।
तो काम करने वाली आर्किटेक्चर दो परतें हैं: एक फ़ेच परत जो सच्ची निर्मित HTML लौटाती है, और Grok एक एक्सट्रैक्शन परत के रूप में जो इसे रिकॉर्ड में बदलती है। कोड से पहले एक और स्पष्टता: यह गाइड Grok को वेब पर निर्देशित करती है। स्क्रैपर को Grok पर निर्देशित करना — उसके उत्तरों को डेटा के रूप में कैद करना — विपरीत कार्य है, जिसे Grok Scraper API गाइड और LLM स्क्रैपर व्याख्या द्वारा कवर किया गया है।
स्थापित करें
पूरा उपकरण श्रृंखला OpenAI SDK के साथ जुड़ी requests है — इस गाइड के लिए बनाए गए संस्करण openai 2.34.0 और वर्तमान requests हैं:
bash
pip install "openai==2.34.0" requests
कॉन्फ़िगर करें
कुंजियाँ पर्यावरण में रहती हैं, कभी भी स्रोत में नहीं:
bash
export XAI_API_KEY="xai-your_key"
export SCRAPELESS_API_KEY="sk_your_scrapeless_key"
एक पृष्ठ प्राप्त करें जिसे Grok वास्तव में पढ़ सकता है
निकासी की गुणवत्ता फ़ेच निष्ठा द्वारा सीमित होती है, इसलिए वहीं से शुरू करें जहां अधिकांश Grok ट्यूटोरियल समाप्त होते हैं। JavaScript-निर्मित पृष्ठों पर, जिसे एक साधारण HTTP क्लाइंट प्राप्त करता है वह वह दस्तावेज़ नहीं है जिसे एक पाठक देखता है — सामग्री केवल तब आती है जब स्क्रिप्ट DOM बनाती है, एक जीवनचक्र जिसे HTML स्क्रिप्टिंग विनिर्देश द्वारा परिभाषित किया गया है। एक स्क्रिप्ट अंतर को दिखाती है और उस संस्करण को बचाती है जिसे निकालने के लिए मूल्यवान है:
python
# fetch_rendered.py — साधारण GET बनाम सर्वर-साइड रेंडरिंग, वही URL
import os
import requests
URL = "https://quotes.toscrape.com/js/"
MARKER = '<span class="text"'
plain = requests.get(URL, timeout=60).text
print(f"साधारण GET: {len(plain):,} वर्ण | उद्धरण तत्व: {plain.count(MARKER)}")
resp = requests.post(
"https://api.scrapeless.com/api/v1/unlocker/request",
headers={
"Content-Type": "application/json",
"x-api-token": os.environ["SCRAPELESS_API_KEY"],
},
json={
"actor": "unlocker.webunlocker",
"input": {"url": URL, "method": "GET", "js_render": True},
},
timeout=120,
)
resp.raise_for_status()
rendered = resp.json().get("data", "")
print(f"rendered: {len(rendered):,} वर्ण | उद्धरण तत्व: {rendered.count(MARKER)}")
with open("page.html", "w", encoding="utf-8") as f:
f.write(rendered)
यह रन 'उद्धरण तत्व: 0' को सामान्य फेच के लिए और 'उद्धरण तत्व: 10' को रेंडर किए गए फेच के लिए प्रिंट करता है। रेंडरिंग, अनलॉकिंग, और प्रॉक्सी राउटिंग सभी सर्वर-साइड पर एक ही POST में होती हैं — यूनिवर्सल स्क्रेपिंग API फेच लेयर है, और 'page.html' अब कुछ ऐसा है जिसे एक मॉडल निकाल सकता है।
बुनियादी कार्यान्वयन: एक्सट्रैक्टर के रूप में ग्रॉक
xAI एंडपॉइंट मानक OpenAI चैट-कंप्लीशन अनुरोध को लेता है। दो पैरामीटर विश्वसनीयता को बनाए रखते हैं: 'temperature=0' आउटपुट को सभी रन में स्थिर रखता है, और JSON मोड इसे पार्स करने योग्य रखता है। सिस्टम संदेश में आप जिस सटीक कुंजी को चाहते हैं, उसे नाम दें और मॉडल को बताएं कि अनुपलब्ध मानों के साथ क्या करना है।
नोट: इस ब्लॉक को एक 'XAI_API_KEY' की आवश्यकता होती है जो क्रेडिट के साथ हो — यह एकमात्र पूर्वापेक्षा है जो यह गाइड मानती नहीं है। अगला खंड ओपनराउटर के माध्यम से समान निष्कर्ष को लाइव चलाता है, जिसमें कैप्चर किया गया आउटपुट होता है।
python
# extract_grok.py — xAI API के माध्यम से ग्रॉक निष्कर्षण (XAI_API_KEY की आवश्यकता है)
import json
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.x.ai/v1",
api_key=os.environ["XAI_API_KEY"],
)
page_html = open("page.html", encoding="utf-8").read()
completion = client.chat.completions.create(
model="grok-4.5",
temperature=0,
response_format={"type": "json_object"},
messages=[
{
"role": "system",
"content": 'हर उद्धरण निकालें। केवल JSON के साथ प्रतिक्रिया दें: '
'{"quotes":[{"text":str,"author":str,"tags":[str]}]}. अनुपलब्ध मानों के लिए null का उपयोग करें।',
},
{"role": "user", "content": page_html},
],
)
data = json.loads(completion.choices[0].message.content)
print(f"निकाले गए {len(data['quotes'])} उद्धरण")
'grok-4.5' मॉडल है जिस पर xAI का वर्तमान दस्तावेज़ केंद्रित है; अपने खाते की जो भी श्रेणी है, उसमें स्वप्न करें। अनुरोध स्वरूप नहीं बदलता।
क्या आपके पास xAI कुंजी नहीं है? ओपनराउटर के माध्यम से वही अनुरोध चलाएं
क्योंकि अनुरोध ओपनएआई के रूप में अंत से अंत तक है, एक एग्रीगेटर कुंजी दो एडिट के साथ काम करती है: 'base_url' और मॉडल स्ट्रिंग। यह वह विविधता है जो इस गाइड ने असली में निष्पादित की थी — एक आत्म-contained स्क्रिप्ट में फेच और निष्कर्षण:
python
# extract_openrouter.py — वही निष्कर्ष, ओपनराउटर के माध्यम से निष्पादित
import json
import os
import requests
from openai import OpenAI
resp = requests.post(
"https://api.scrapeless.com/api/v1/unlocker/request",
headers={
"Content-Type": "application/json",
"x-api-token": os.environ["SCRAPELESS_API_KEY"],
},
json={
"actor": "unlocker.webunlocker",
"input": {"url": "https://quotes.toscrape.com/js/", "method": "GET", "js_render": True},
},
timeout=120,
)
resp.raise_for_status()
page_html = resp.json().get("data", "")
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key=os.environ["OPENROUTER_API_KEY"],
)
completion = client.chat.completions.create(
model="x-ai/grok-4.20",
temperature=0,
response_format={"type": "json_object"},
messages=[
{
"role": "system",
"content": 'हर उद्धरण निकालें। केवल JSON के साथ प्रतिक्रिया दें: '
'{"quotes":[{"text":str,"author":str,"tags":[str]}]}. अनुपलब्ध मानों के लिए null का उपयोग करें।',
},
{"role": "user", "content": page_html},
],
)
data = json.loads(completion.choices[0].message.content)
print(f"निकाले गए {len(data['quotes'])} उद्धरण रेंडर किए गए पृष्ठ से")
print(json.dumps(data["quotes"][0], ensure_ascii=False))
लाइव रन ने सभी 10 उद्धरणों को निकाला और पहले उद्धरण को प्रिंट किया:
text
निकाले गए 10 उद्धरण रेंडर किए गए पृष्ठ से
{"text": "“दुनिया जैसा हम ने इसे बनाया है, यह हमारे सोचने की प्रक्रिया है। इसे बिना हमारे सोचने को बदले बदला नहीं जा सकता।”", "author": "अल्बर्ट आइंस्टीन", "tags": ["परिवर्तन", "गहरे-सोच", "सोच", "दुनिया"]}
लेखक और टैग एरे बिना किसी समस्या के आई, और पूरी कॉल में 3,211 टोकन खर्च हुए। यही पूरी स्क्रिप्टर है: एक POST फेच करने के लिए, एक कंप्लीशन निकालने के लिए, कहीं भी चयनकर्ता नहीं।
अपना API कुंजी मुफ्त योजना पर प्राप्त करें: app.scrapeless.com
उन्नत पैटर्न
- स्कीमा को सिस्टम संदेश में क़ैद करें, उपयोगकर्ता प्रॉम्प्ट में नहीं। पृष्ठ HTML उपयोगकर्ता के टर्न में जाता है; अनुबंध सिस्टम टर्न में रहता है जहां वह पृष्ठ से पृष्ठ की लूपों में जीवित रहता है।
- प्रॉम्प्ट में नहीं, पायथन में लूप करें। एक कंप्लीशन के लिए एक पृष्ठ से रिकॉर्डों के सीमाओं के पार बहने से रोकने और असफलताओं को एक निश्चित URL के लिए जिम्मेदार ठहराने में मदद मिलती है।
- जब कर सकें, कम पृष्ठ भेजें। ग्रॉक उस पूरे दस्तावेज़ को पढ़ता है जो आप भेजते हैं, क्रोम और सब। सामग्री कंटेनर को अलग करने या HTML के बजाय मार्कडाउन प्राप्त करने से टोकन खर्च सामान्यतः अनुपात में कटता है।
- टैग और सूचियों को स्पष्ट रूप से व्यवस्थित करें। स्कीमा में
tags:[str]नामकरण ने ऊपर चलने में साफ़ एरे उत्पन्न किया; सूची फ़ील्ड को बिना वर्णित छोड़ दें और मॉडल उन्हें स्ट्रिंग्स में समतल कर देता है।
समस्या समाधान
- JSON की बजाय प्रोस। आपने
response_format={"type": "json_object"}गिरा दिया — इसके साथ, एंडपॉइंट आउटपुट को संकुचित करता है; इसके बिना, आप goodwill को पार्स कर रहे हैं। - दस रिकॉर्ड अपेक्षित, तीन लौटाए। मॉडल को दोष देने से पहले जाँच करें कि आपने क्या लाया: HTML में किसी ज्ञात तत्व की गिनती करें जैसे फेच स्क्रिप्ट करती है। नजदीकी-खाली फेच का मतलब रेंडरिंग समस्या है, जिसे फेच लेयर पर
js_renderके साथ ठीक किया जा सकता है। - समान इनपुट पर विभिन्न आउटपुट। सेट करें
temperature=0; निष्कर्षण कोई रचनात्मकता कार्य नहीं है। - लागतें ऊपर की ओर बढ़ रही हैं। टोकन खर्च इनपुट आकार को ट्रैक करता है। पृष्ठ को छोटा करें, कुछ न बैच करें, और ऊपर चलने की रिपोर्ट के अनुसार प्रति-पृष्ठ टोकन गिनतियों पर नज़र रखें।
निष्कर्ष
Grok अपने स्थान को एक स्क्रैपर में हासिल करता है क्योंकि यह वह परत है जो कभी भी नेटवर्क को नहीं देखती: OpenAI-आकार के अनुरोध, निर्धारक सेटिंग्स, एक पृष्ठ में, एक JSON ऑब्जेक्ट बाहर। यह परत तय करती है कि क्या इनमें से कोई भी संभव है वह फेच है — पहले स्क्रिप्ट का 0 बनाम 10 प्रिंट उस प्रश्न को तय करता है — और एक सर्वर-रेंडर्ड POST उस अंतर को बंद करता है। दोनों को एक साथ केबल करें और डेमो पृष्ठ के दस उद्धरण सभी मान्य रिकॉर्ड के रूप में आते हैं, टैग और सभी।
क्या आप Grok को असली पृष्ठों के लिए तैयार हैं?
इस गाइड में फेच लेयर हर पृष्ठ के लिए एक POST है यूनिवर्सल स्क्रैपिंग API — योजनाएँ और मात्रा मूल्य निर्धारण पृष्ठ पर हैं, और डेवलपर डॉक unlocker.webunlocker मापदंडों को कवर करती हैं। app.scrapeless.com पर मुफ्त योजना पर एक कुंजी बनाएं और दोनों स्क्रिप्ट को ठीक उसी तरह पुनः चलाएं।
अक्सर पूछे जाने वाले प्रश्न
प्रश्न: क्या Grok खुद से वेबसाइटें स्क्रैप कर सकता है?
नहीं। Grok API उस पाठ से निकालता है जो आप प्रदान करते हैं; यह अनुरोध नहीं कर सकता, JavaScript को उत्पन्न नहीं कर सकता, या सत्र नहीं रख सकता। इसका वेब-खोज उपकरण लाइव वेब को पढ़ता है ताकि उत्तरों को आधार प्रदान कर सके, लेकिन पृष्ठ चयन, रेंडरिंग निष्ठा, और मात्रा आपकी नियंत्रण में नहीं रहती — एक स्क्रैपिंग पाइपलाइन को अपनी स्वयं की फेच लेयर की आवश्यकता होती है।
प्रश्न: क्या Grok का अंतर्निहित वेब खोज स्क्रैपिंग के समान है?
भिन्न कार्य। खोज उपकरण संदर्भ प्राप्त करता है ताकि मॉडल एक प्रश्न का उत्तर दे सके; स्क्रैपिंग विशिष्ट पृष्ठों को प्राप्त करती है ताकि आप अपनी पसंद के अनुसार विशिष्ट फ़ील्ड निकाल सकें। जब आप उत्तर चाहते हैं तब उपकरण का उपयोग करें, और जब आप डेटा चाहते हैं तब इस गाइड में दो-परत पाइपलाइन का उपयोग करें।
प्रश्न: यह Grok स्क्रैपर से कैसे भिन्न है?
दिशा। यहाँ, Grok पार्सर है और वेब लक्ष्य है। एक Grok स्क्रैपर इसे उलट देता है — यह Grok के अपने उत्तरों को संरचित डेटा के रूप में कैप्चर करता है, जिसे Scrapeless एक अभिनेता के रूप में भेजता है; परिचय में लिंक किया गया Grok स्क्रैपर API गाइड उस कार्य को कवर करता है।
प्रश्न: मुझे निष्कर्षण के लिए कौन सा Grok मॉडल उपयोग करना चाहिए?
सबसे सस्ता जो आपकी स्कीमा को पकड़ता है। एक कड़े JSON अनुबंध और temperature=0 के साथ निष्कर्षण कोई तर्क-गहन कार्य नहीं है, इसलिए छोटे से शुरू करें — इस गाइड में लाइव रन ने OpenRouter के माध्यम से एक कम कीमत वाला Grok स्तर का उपयोग किया और सभी 10 रिकॉर्ड को सही ढंग से लौटाया — और केवल तब बढ़ें जब फ़ील्ड गलत वापस आने लगें।
प्रश्न: क्या Grok के साथ स्क्रैपिंग कानूनी है?
मॉडल संग्रह नियमों को नहीं बदलता। केवल सार्वजनिक पृष्ठों को फेच करें, साइट के नियमों का सम्मान करें और रोबोट्स बहिष्करण प्रोटोकॉल द्वारा मानकीकृत रोबोट निर्देशों का पालन करें, मात्रा सीमित रखें, और उन कानूनों के तहत व्यक्तिगत डेटा को संभालें जो आपके लिए लागू होते हैं — इसके अलावा मॉडल पक्ष पर xAI की उपयोग शर्तें।
स्क्रैपलेस में, हम केवल सार्वजनिक रूप से उपलब्ध डेटा का उपयोग करते हैं, जबकि लागू कानूनों, विनियमों और वेबसाइट गोपनीयता नीतियों का सख्ती से अनुपालन करते हैं। इस ब्लॉग में सामग्री केवल प्रदर्शन उद्देश्यों के लिए है और इसमें कोई अवैध या उल्लंघन करने वाली गतिविधियों को शामिल नहीं किया गया है। हम इस ब्लॉग या तृतीय-पक्ष लिंक से जानकारी के उपयोग के लिए सभी देयता को कोई गारंटी नहीं देते हैं और सभी देयता का खुलासा करते हैं। किसी भी स्क्रैपिंग गतिविधियों में संलग्न होने से पहले, अपने कानूनी सलाहकार से परामर्श करें और लक्ष्य वेबसाइट की सेवा की शर्तों की समीक्षा करें या आवश्यक अनुमतियाँ प्राप्त करें।



