जेमिनि वेब स्क्रैपिंग: पाइथन में स्कीमा-प्रथम निष्कर्षण
Web Data Collection Specialist
TL;DR:
- जेमिनी का सस्ता फ्लैश स्तर इस काम के लिए बिल्कुल सही है। इसे एक रेंडर की गई पृष्ठ और एक सख्त स्कीमा दें और यह सत्यापित रिकॉर्ड लौटाता है - इस मार्गदर्शिका में एक लाइव रन ने 50,449-चरित्र कैटलॉग पृष्ठ से 12,904 टोकन पर सभी 20 उत्पाद निकाले।
- स्कीमा पहले, प्रॉम्प्ट बाद में। वर्तमान जेमिनी एपीआई अनुरोध में एक पायडैंटिक-व्युत्पन्न JSON स्कीमा लेती है, इसलिए फ़ील्ड नाम और प्रकार एपीआई द्वारा लागू किए जाते हैं न कि प्रोस में मांगे जाते हैं।
- जेमिनी क्या नहीं हल करता है वह है पृष्ठ प्राप्त करना। मॉडल JavaScript को रेंडर नहीं कर सकता, सत्रों को नहीं पकड़ सकता, या आपकी चुनी हुई मात्रा में पहुँच चुनौतियों को साफ नहीं कर सकता - यह एक फेच लेवल है, और इस मार्गदर्शिका का फेच एक पृष्ठ के लिए एक POST के माध्यम से किया जाता है Scrapeless यूनिवर्सल स्क्रैपिंग एपीआई।
- टोकन लागत पृष्ठ के आकार के साथ चलती है, इसलिए फेच गुणवत्ता लागत नियंत्रण है। ट्रिम किए गए, रेंडर किए गए सामग्री भेजना टूटे या बेतुके फेच के बजाय यह पैमाने पर पैसे और वास्तविक धन के बीच का अंतर है।
- क्या अभी तक Google कुंजी नहीं है? एक ही निष्कर्ष OpenRouter के माध्यम से चलता है। इस मार्गदर्शिका ने इसे
google/gemini-2.5-flash-liteपर लाइव निष्पादित किया और कैप्चर किए गए आउटपुट को दिखाया। - फेच पक्ष पर शुरू करने के लिए स्वतंत्र। app.scrapeless.com पर अपना Scrapeless API कुंजी बनाएं।
क्या जेमिनी वेबसाइटों को स्क्रैप कर सकता है?
जेमिनी निकालता है; यह संग्रह नहीं करता। मॉडल को पृष्ठ पाठ और एक स्कीमा दें और यह स्वच्छ रिकॉर्ड लौटाता है - वह भाग वास्तव में उत्कृष्ट है, और फ्लैश स्तर पर सस्ता है। लेकिन एक स्क्रैपिंग पाइपलाइन को विशेष पृष्ठ प्राप्त करने, उनके JavaScript को रेंडर करने, और ऐसा मात्रा और लय में करना है जिसे आप नियंत्रित करते हैं, और इनमें से कोई भी एक भाषा मॉडल एपीआई में नहीं है।
गूगल URL-संदर्भ उपकरण भेजता है जो एपीआई को एक लिंक पढ़ने देता है जो आप पास करते हैं, और यह एक ईमानदार फ्रेमिंग के लायक है: एक बार के पढ़ने के लिए सुविधाजनक, लेकिन आप इसकी फेचिंग विरासत में लेते हैं - रेंडरिंग व्यवहार, भूगोल, या जब पृष्ठ स्वचालित पहुँच को चुनौती देता है तो क्या होता है इस पर कोई नियंत्रण नहीं। उत्पादन निष्कर्षण परतों को अलग रखता है: एक फेच लेयर जिसे आप नियंत्रित करते हैं, फिर जेमिनी को पार्सर के रूप में।
एक स्पष्टता, क्योंकि कीवर्ड दोनों तरीकों से काटता है: यह मार्गदर्शिका जेमिनी को वेब की ओर एक निष्कर्षण इंजन के रूप में इंगित करती है। जेमिनी के अपने उत्तरों को डेटा के रूप में कैद करना विपरीत कार्य है - वह जेमिनी स्क्रैपर एपीआई मार्गदर्शिका है, और LLM स्क्रैपर व्याख्याता उस श्रेणी को कवर करता है।
स्थापित करें
दो ग्राहक: Google's SDK स्वदेशी पथ के लिए और requests फेच स्तर के लिए। इस मार्गदर्शिका में चलाए गए रन ने Python 3.12 का उपयोग किया:
bash
pip install google-genai requests
कॉन्फ़िगर करें
दोनों कुंजी वातावरण से आती हैं:
bash
export GEMINI_API_KEY="your_google_ai_studio_key"
export SCRAPELESS_API_KEY="sk_your_scrapeless_key"
एक पृष्ठ फेच करें जो निकालने के लायक हो
डेमो लक्ष्य एक सार्वजनिक पुस्तकालय कैटलॉग पृष्ठ है जो स्क्रैपिंग अभ्यास के लिए बनाया गया है - 20 उत्पाद, प्रत्येक में एक शीर्षक, कीमत, स्टॉक ध्वज, और प्रस्तुतिकरण HTML में छिपी हुई स्टार रेटिंग। यूनिवर्सल स्क्रैपिंग एपीआई पर एक POST रेंडरिंग, अनलॉकिंग, और प्रॉक्सी राउटिंग को सर्वर-साइड पर संभालती है:
python
# fetch_catalogue.py — एक POST रेंडर किए गए कैटलॉग पृष्ठ को लौटाता है
import os
import requests
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://books.toscrape.com/catalogue/page-1.html", "method": "GET"},
},
timeout=120,
)
resp.raise_for_status()
html = resp.json().get("data", "")
print(f"फेच किए गए {len(html):,} अक्षर")
print("HTML में उत्पाद कार्ड:", html.count('<article class="product_pod">'))
with open("page.html", "w", encoding="utf-8") as f:
f.write(html)
यह रन 50,449 अक्षर और 20 उत्पाद कार्ड प्रिंट करता है। वह 50k आंकड़ा बाद में महत्वपूर्ण है: यही जेमिनी पढ़ेगा, और जिसके लिए आप टोकन का भुगतान करेंगे।
मूल कार्यान्वयन: स्कीमा-प्रथम निष्कर्षण
वर्तमान जेमिनी एपीआई अनुरोध में एक JSON स्कीमा स्वीकार करता है, और एक पायडैंटिक मॉडल उत्पन्न करने का सबसे साफ तरीका है - स्कीमा भाषा वह है जो JSON स्कीमा विशिष्टता द्वारा परिभाषित की गई है। इस पृष्ठ पर रेटिंग्स एक CSS वर्ग में होती हैं न कि पाठ में, इसलिए स्कीमा और सिस्टम नियम बताते हैं कि उन्हें कैसे पढ़ा जाए।
नोट: इस ब्लॉक को एक
GEMINI_API_KEYकी आवश्यकता है — यह एक ऐसा पूर्वापेक्षा है जिसे यह मार्गदर्शिका नहीं मानती है। अगला खंड OpenRouter के माध्यम से एक समान निष्कर्षण को लाइव चलाता है, जिसमें कैप्चर किया गया आउटपुट है। सटीक अनुरोध सतह की दस्तावेजीकरण गेमिनी संरचित-आउटपुट मार्गदर्शिका में की गई है।
python
# extract_gemini.py — मूल गेमिनी निष्कर्षण (GEMINI_API_KEY की आवश्यकता)
from google import genai
from pydantic import BaseModel
class Book(BaseModel):
title: str
price_gbp: float
in_stock: bool
rating: int
class Catalogue(BaseModel):
books: list[Book]
client = genai.Client() # पर्यावरण से GEMINI_API_KEY पढ़ता है
page_html = open("page.html", encoding="utf-8").read()
interaction = client.interactions.create(
model="gemini-3.5-flash",
input="हर किताब को निकालें। रेटिंग 1-5 है, इसे स्टार-रेटिंग वर्ग नाम से पढ़ें।\n\n" + page_html,
response_format={
"type": "text",
"mime_type": "application/json",
"schema": Catalogue.model_json_schema(),
},
)
print(interaction)
स्कीमा प्रवर्तन करता है: price_gbp एक संख्या के रूप में वापस आता है, in_stock एक बूलियन के रूप में, rating एक पूर्णांक के रूप में — कोई पोस्ट-हॉक स्ट्रिंग क्लीनअप नहीं।
Google की कुंजी नहीं है? इसे OpenRouter के माध्यम से चलाएं
निष्कर्षण OpenAI-संगत सतह पर भी चलता है जिसमें इसके पीछे एक गेमिनी मॉडल होता है, यही कारण है कि यह मार्गदर्शिका इसे अंत से अंत तक कार्यान्वित करती है — फेच और निष्कर्षण एक स्व-निहित स्क्रिप्ट में:
python
# extract_openrouter.py — समान निष्कर्षण, OpenRouter के माध्यम से निष्पादित
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://books.toscrape.com/catalogue/page-1.html", "method": "GET"},
},
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="google/gemini-2.5-flash-lite",
temperature=0,
max_tokens=4000,
response_format={"type": "json_object"},
messages=[
{
"role": "system",
"content": 'हर किताब को निकालें। केवल JSON के साथ उत्तर दें: '
'{"books":[{"title":str,"price_gbp":number,"in_stock":bool,"rating":int}]}. '
"रेटिंग 1-5 है, इसे स्टार-रेटिंग वर्ग नाम से पढ़ें।",
},
{"role": "user", "content": page_html},
],
)
data = json.loads(completion.choices[0].message.content)
print(f"निकाले गए {len(data['books'])} किताबें")
print(json.dumps(data["books"][0], ensure_ascii=False))
लाइव रन ने सभी 20 उत्पादों को वापस किया, पहले रिकॉर्ड:
text
निकाले गए 20 किताबें
{"title": "A Light in the Attic", "price_gbp": 51.77, "in_stock": true, "rating": 3}
कीमत को फ्लोट में संसाधित किया गया, स्टॉक को बूलियन में, और तीन-स्टार रेटिंग को सही ढंग से एक वर्ग नाम से पढ़ा गया — 50k वर्णों के कैटलॉग HTML से, एक कॉल में, 12,904 टोकन के लिए एक मॉडल की कीमत एक डॉलर के एक अंश में प्रति मिलियन।
अपनी API कुंजी मुफ्त योजना पर प्राप्त करें: app.scrapeless.com
उन्नत पैटर्न: टोकन अर्थशास्त्र
निष्कर्षण लागत इनपुट-प्रधान है, इसलिए फेच परत भी बजट परत है।
- पृष्ठ पर जल्दी टोकन मापें। ऊपर का रन एक कैटलॉग पृष्ठ के लिए 12,904 टोकन में खर्च हुआ। अपने पृष्ठ की संख्या को गुणा करें इससे पहले कि आप मॉडल स्तर पर प्रतिबद्ध हों, न कि चालान के बाद।
- भेजने से पहले छंटाई करें। पृष्ठ क्रोम एक कर है। उत्पाद कंटेनर को अलग करना, या कच्चे HTML के बजाय पृष्ठों को मार्कडाउन के रूप में फेच करना इनपुट आकार को कम करता है — अक्सर आधे से अधिक — बिना किसी निष्कर्षणीय सामग्री के नुकसान के।
- स्कीमा कार्य के लिए फ्लैश स्तर पर रहें। एक सख्त स्कीमा और
temperature=0निष्कर्षण को एक सहेजने वाला कार्य बनाता है; ऊपर का रन कुछ बड़ा आवश्यक नहीं था। जब फील्ड साफ इनपुट पर गलत निकले तो केवल तब मॉडल आकार को बढ़ाएं। - प्रॉम्प्ट में कुछ भी कैश न करें। स्कीमा एक कॉल प्रति सिस्टम संदेश में जीवित रहता है; नए कॉल में पिछले पृष्ठों के उदाहरण न चिपकाएं — यह इनपुट को बढ़ाता है और मॉडल को पुरानी रिकॉर्ड्स को दोहराना सिखाता है।
समस्या निवारण
-
फील्ड स्ट्रिंग के रूप में वापस आती हैं। आपका स्कीमा API तक नहीं पहुँच रहा है — जांचें कि मूल कॉल
schemaको पास करता है (या OpenRouter कॉल सिस्टम संदेश में JSON अनुबंध को पास करता है) न कि फील्ड को मुक्त रूप में वर्णन करता है। -
20-उत्पाद पृष्ठ से शून्य या तीन उत्पाद। पहले फ़ेच किए गए HTML का निरीक्षण करें: फ़ेच स्क्रिप्ट जिस तरह से उत्पाद कार्ड की गणना करती है, उसी तरह गणना करें। एक लगभग-खाली फ़ेच एक रेंडरिंग या पहुंच समस्या है — एक फ़ेच-लेयर ठीक, न कि एक प्रॉम्प्ट ठीक।
Here is the translated text in Hindi: -
रेटिंग्स सभी 5 के रूप में वापस आती हैं। मूल्य मार्कअप में एन्कोड किया गया है, पाठ में नहीं। बताएं कि यह कहां रहता है ("स्टार-रेटिंग क्लास नाम से पढ़ें"), जैसा कि यहां दोनों निकासी ब्लॉक करते हैं।
-
लागत दौड़ के बीच कूदती है। इनपुट आकारों की तुलना करें; एक ऐसा रीडिजाइन जो पृष्ठ के वजन को दोगुना करता है, आपके टोकन बिल को दोगुना करता है। ट्रिमिंग और मार्कडाउन फ़ेचिंग लिवर्स हैं।
निष्कर्ष
जेमिनी का फ्लैश टियर और एक कठोर स्कीमा 50,000-शब्दों के कैटलॉग पृष्ठ को पॉकेट चेंज के लिए 20 टाइप किए गए रिकॉर्ड में बदल देता है — यह निकासी का आधा हिस्सा है, और यह अब आसान आधा है। जो आधा यह तय करता है कि रिकॉर्ड अस्तित्व में हैं या नहीं, वह है फ़ेच: रेंडर्ड, नियंत्रित, प्रति पृष्ठ एक POST। परतों को अलग रखें, प्रति पृष्ठ टोकन को मापें, और समान चालीस लाइनें एक डेमो बुकस्टोर से एक वास्तविक कैटलॉग में पैमाने पर हैं।
क्या आप जेमिनी को वास्तविक पृष्ठ फीड करने के लिए तैयार हैं?
यहां फ़ेच परत यूनिवर्सल स्क्रेपिंग एपीआई है - योजनाएं और अनुरोध मात्रा प्राइसिंग पृष्ठ पर हैं, और डेवलपर डॉक्स प्रत्येक unlocker.webunlocker पैरामीटर को कवर करती हैं। फ्री प्लान पर एक कुंजी बनाएं app.scrapeless.com पर और उपरोक्त कैटलॉग फ़ेच लिखी गई तरह से चलेगी।
सामान्य प्रश्न
प्रश्न: क्या जेमिनी सीधे वेबसाइटों तक पहुंच सकता है?
केवल गूगल के URL-कॉन्टेक्स्ट टूल के माध्यम से, जो एक बार की रीड के लिए एक लिंक सर्वर-साइड फ़ेच करता है। यह आपको रेंडरिंग नियंत्रण, भौगोलिक एग्रेस या मात्रा नहीं देता — वे गुण जिस पर एक स्क्रेपिंग पाइपलाइन बनाई जाती है — यही कारण है कि उत्पादन सेटअप जेमिनी को एक समर्पित फ़ेच परत के साथ जोड़ते हैं और मॉडल को साफ़ पृष्ठ पाठ देते हैं।
प्रश्न: मैं निकासी के लिए कौन सा जेमिनी मॉडल उपयोग करूं?
सबसे छोटा फ्लैश-टियर मॉडल जो आपके स्कीमा को धारण करता है। एक कठोर स्कीमा के खिलाफ निकासी एक बाधित कार्य है, कोई तर्क करने वाला बेंचमार्क नहीं — इस गाइड में लाइव रन ने एक फ्लैश-लाइट मॉडल का उपयोग किया और सभी 20 रिकॉर्ड को सही ढंग से टाइप किया। केवल तभी एक टियर ऊपर बढ़ें जब साफ़ इनपुट अभी भी गलत फ़ील्ड उत्पन्न करे।
प्रश्न: व्यापक स्तर पर जेमिनी वेब स्क्रेपिंग की लागत कितनी है?
इनपुट टोकन हावी होते हैं, इसलिए लागत लगभग पृष्ठ × प्रति पृष्ठ टोकन × मॉडल दर होती है। यहां मापी गई रन 50,449-शब्द पृष्ठ के लिए 12,904 टोकन थी; क्रोम को ट्रिम करना या मार्कडाउन फ़ेचिंग उसे महत्वपूर्ण रूप से काटता है। अनुमान लगाने से पहले एक वास्तविक पृष्ठ को मापें — आविष्कृत औसत ही बजट को नष्ट करते हैं।
प्रश्न: यह जेमिनी स्क्रैपर से किस प्रकार भिन्न है?
दिशा। यह गाइड जेमिनी का उपयोग वेब पर पॉइंटेड पार्सर के रूप में करती है। एक जेमिनी स्क्रैपर जेमिनी पर एक स्क्रैपर को इंगित करता है — इसके उत्तरों, उद्धरणों और स्रोतों को डेटा के रूप में कैप्चर करता है। स्क्रेपलेस इसे एक अभिनेता के रूप में भेजता है; परिचय में लिंक किया गया जेमिनी स्क्रैपर एपीआई गाइड इसे कवर करता है।
प्रश्न: क्या जेमिनी के साथ स्क्रेपिंग करना कानूनी है?
निकासी परत संग्रह नियमों के बारे में कुछ नहीं बदलती है। केवल सार्वजनिक पृष्ठों को फ़ेच करें, साइट की शर्तों और रोबोट्स निष्क exclusion प्रोटोकॉल द्वारा मानकीकृत रोबोट निर्देशों का सम्मान करें, मात्रा को सीमित रखें, और किसी भी व्यक्तिगत डेटा को कानूनी रूप से संभालें - साथ ही मॉडल पक्ष पर गूगल के एपीआई की शर्तें।
स्क्रैपलेस में, हम केवल सार्वजनिक रूप से उपलब्ध डेटा का उपयोग करते हैं, जबकि लागू कानूनों, विनियमों और वेबसाइट गोपनीयता नीतियों का सख्ती से अनुपालन करते हैं। इस ब्लॉग में सामग्री केवल प्रदर्शन उद्देश्यों के लिए है और इसमें कोई अवैध या उल्लंघन करने वाली गतिविधियों को शामिल नहीं किया गया है। हम इस ब्लॉग या तृतीय-पक्ष लिंक से जानकारी के उपयोग के लिए सभी देयता को कोई गारंटी नहीं देते हैं और सभी देयता का खुलासा करते हैं। किसी भी स्क्रैपिंग गतिविधियों में संलग्न होने से पहले, अपने कानूनी सलाहकार से परामर्श करें और लक्ष्य वेबसाइट की सेवा की शर्तों की समीक्षा करें या आवश्यक अनुमतियाँ प्राप्त करें।



