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

मिस्ट्रल वेब स्क्रैपिंग: एचटीएमएल विशेषताओं में छिपे डेटा को पढ़ना

James Thompson
James Thompson

Scraping and Proxy Management Expert

29-Jul-2026

TL;DR:

  • Mistral डेटा पढ़ता है जो दृश्य टेक्स्ट में बिल्कुल भी नहीं है, और एक लाइव रन इसका प्रमाण है। एक प्रदर्शित लैपटॉप कैटलॉग पृष्ठ को देते हुए, mistralai/ministral-3b-2512 ने 6 उत्पादों को पूर्ण, बिना काटे हुए उत्पाद नाम और एक संख्यात्मक रेटिंग के साथ लौटाया — ये दोनों मान केवल HTML गुणों में होते हैं, न कि उस टेक्स्ट में जिसे पाठक देखता है।
  • वर्तमान में सबसे सस्ती Mistral स्तर एक समर्पित छोटे-मॉडल श्रृंखला है, न कि एक घटित ध्वजांकित मॉडल। Ministral 3 Mistral का उद्देश्य-निर्मित कुशल परिवार है; इस गाइड ने वर्तमान सबसे सस्ती प्रविष्टि के लिए लाइव OpenRouter कैटलॉग को चेक किया, न कि पुराने "Mistral 7B" नाम को याद से फिर से उपयोग किया।
  • मॉडल अभी भी फ़ेच नहीं कर सकता। रेंडरिंग, सत्र, और पहुंच की चुनौतियां एक फ़ेच परत से संबंधित हैं; इस गाइड का एक पृष्ठ के लिए एक POST Scrapeless Universal Scraping API के माध्यम से है।
  • केवल गुण डेटा एक वास्तविक निष्कर्षण जाल है। एक पृष्ठ का दृश्य लिंक टेक्स्ट पढ़ सकता है "Packard 255 G2...", जबकि असली उत्पाद नाम कुछ अक्षरों की दूरी पर title गुण में पूरी तरह से बैठा होता है — इस गाइड की योजना और प्रॉम्प्ट सही स्थान बताते हैं जहां से पढ़ना है।
  • अभी तक कोई Mistral कुंजी नहीं? समान अनुरोध OpenRouter के माध्यम से चलता है। इस गाइड ने इसे mistralai/ministral-3b-2512 पर लाइव निष्पादित किया और कैप्चर किया गया आउटपुट दिखाता है।
  • फेच साइड पर प्रारंभ करने के लिए स्वतंत्र। app.scrapeless.com पर अपना Scrapeless API कुंजी बनाएं।

क्या Mistral वेब साइटों को स्क्रेप कर सकता है?

Mistral निष्कर्षण करता है; यह संग्रह नहीं करता। इसे पृष्ठ टेक्स्ट और एक योजना भेजें और यह आपके द्वारा नामित क्षेत्रों को लौटाता है — सस्ते में, क्योंकि मॉडल परिवार की छोटी स्तर की कीमतें किसी भी वर्तमान API में सबसे कम हैं। जो वह नहीं कर सकता है वह है एक URL प्राप्त करना, JavaScript को निष्पादित करना जो एक पृष्ठ को इकट्ठा करता है, या स्क्रैपिंग वॉल्यूम पर सत्र और पहुंच की चुनौतियों को प्रबंधित करना। वह काम एक फ़ेच परत को सौंपा गया है, जिसे जानबूझकर मॉडल से अलग रखा गया है।

यह वास्तव में एक खुली सतह है: इस साइट पर पहले कोई पोस्ट Mistral को एक लाइव फेच परत के साथ वेब निष्कर्षण के लिए जोड़ने की प्रक्रिया में नहीं गया है। इस श्रेणी में पहुंचने के लिए किस मॉडल परिवार का उपयोग करना है, इसके आसन्न प्रश्न के लिए, LLM स्क्रैपर व्याख्याता और LLM स्क्रैपर्स की रैंकिंग सूची श्रेणी को कवर करते हैं।

स्थापना

आधिकारिक Mistral SDK मूल पथ को कवर करता है, openai OpenRouter पथ को कवर करता है, और requests फ़ेच परत को कवर करता है:

bash Copy
pip install "mistralai==2.7.2" "openai==2.48.0" requests

कॉन्फ़िगर करें

bash Copy
export MISTRAL_API_KEY="your_mistral_key"
export SCRAPELESS_API_KEY="sk_your_scrapeless_key"

एक पृष्ठ को फ़ेच करें जहाँ वास्तविक डेटा गुणों में छिपा है

डेमो लक्ष्य एक सार्वजनिक लैपटॉप-श्रृंगार सैंडबॉक्स है जहाँ दृश्य उत्पाद लिंक संक्षिप्त है ("Packard 255 G2...") लेकिन पूरा नाम उसी लिंक के title गुण में रहता है, और स्टार रेटिंग आईकन मार्कअप से नहीं बल्कि एक लपेटने वाले तत्व पर data-rating मान से ली जाती है। यूनिवर्सल स्क्रैपिंग API के लिए एक POST रेंडर पृष्ठ लौटाता है:

python Copy
# fetch_laptops.py — एक POST रेंडर लैपटॉप कैटलॉग पृष्ठ लौटाता है
import os

import requests

resp = requests.post(
    "https://api.scrapeless.com/api/v2/unlocker/request",
    headers={
        "Content-Type": "application/json",
        "x-api-token": os.environ["SCRAPELESS_API_KEY"],
    },
    json={
        "actor": "unlocker.webunlocker",
        "input": {
            "url": "https://webscraper.io/test-sites/e-commerce/static/computers/laptops",
            "method": "GET",
            "js_render": True,
        },
    },
    timeout=120,
)
resp.raise_for_status()
html = resp.json().get("data", "")
print(f"फेच किए गए {len(html):,} अक्षर")
print("उत्पाद कार्ड:", html.count('class="card thumbnail"'))

with open("page.html", "w", encoding="utf-8") as f:
    f.write(html)

यह रन एक सार्वजनिक स्क्रैपिंग-प्रैक्टिस साइट पर होस्ट किए गए लाइव कैटलॉग पृष्ठ से 6 उत्पाद कार्ड छापता है — एक छोटा, जानबूझकर सीमित पृष्ठ न कि उसी डोमेन से सर्व किए गए पूर्ण सौ से अधिक आइटम की सूची।

बुनियादी कार्यान्वयन: Mistral को निष्कर्षक के रूप में

आधिकारिक SDK की chat.complete विधि response_format={"type": "json_object"} लेती है, जिसका दस्तावेज़ Mistral के JSON-मोड संदर्भ में है। वर्तमान में सबसे सस्ता Mistral टियर ministral-3b-2512 है — Ministral 3 परिवार का सबसे छोटा मॉडल, न कि पुराने Mistral 7B नाम जो अभी भी पुराने ट्यूटोरियल में प्रचलित है।

नोट: इस खंड को MISTRAL_API_KEY की आवश्यकता है जिसमें क्रेडिट हो — यह एकमात्र पूर्वसूचना है जिसे यह गाइड मानता नहीं है। अगला खंड ओपनराउटर के माध्यम से समान निकासी को लाइव चलाएगा, जिसमें कैप्चर किया गया आउटपुट शामिल है।

python Copy
# extract_mistral.py — स्वदेशी Mistral निकासी (आवश्यक MISTRAL_API_KEY)
import json
import os

from mistralai.client import Mistral

client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])

page_html = open("page.html", encoding="utf-8").read()

response = client.chat.complete(
    model="ministral-3b-2512",
    temperature=0,
    max_tokens=2000,
    response_format={"type": "json_object"},
    messages=[
        {
            "role": "system",
            "content": 'हर लैपटॉप को निकालें। केवल JSON के साथ जवाब दें: '
            '{"laptops":[{"title":str,"price_usd":number,"rating":int,"review_count":int}]}. '
            "शीर्षक लिंक के शीर्षक विशेषता से पूरा उत्पाद नाम है, नहीं कि संक्षिप्त दृश्य पाठ। "
            "रेटिंग 1-5 है, इसे data-rating विशेषता से पढ़ें।",
        },
        {"role": "user", "content": page_html},
    ],
)

data = json.loads(response.choices[0].message.content)
print(f"निकाले गए {len(data['laptops'])} लैपटॉप")

कोई पूर्व भरने की चाल, कोई अलग स्कीमा ऑब्जेक्ट नहीं — केवल response_format Mistral के JSON मोड के लिए पर्याप्त है।

Mistral कुंजी नहीं? इसे OpenRouter के माध्यम से चलाएं

क्योंकि दोनों सतहें समान JSON-मोड अनुबंध बोलती हैं, एग्रीगेटर संस्करण ग्राहक और आधार URL के अलावा बहुत कम भिन्न होते हैं। यह वही संस्करण है जो इस गाइड ने वास्तविकता में निष्पादित किया, एक स्व-संपूर्ण स्क्रिप्ट में फ़ेच और निकासी:

python Copy
# extract_openrouter.py — वही निकासी, OpenRouter के माध्यम से निष्पादित
import json
import os

import requests
from openai import OpenAI

resp = requests.post(
    "https://api.scrapeless.com/api/v2/unlocker/request",
    headers={
        "Content-Type": "application/json",
        "x-api-token": os.environ["SCRAPELESS_API_KEY"],
    },
    json={
        "actor": "unlocker.webunlocker",
        "input": {
            "url": "https://webscraper.io/test-sites/e-commerce/static/computers/laptops",
            "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="mistralai/ministral-3b-2512",
    temperature=0,
    max_tokens=2000,
    response_format={"type": "json_object"},
    messages=[
        {
            "role": "system",
            "content": 'हर लैपटॉप को निकालें। केवल JSON के साथ जवाब दें: '
            '{"laptops":[{"title":str,"price_usd":number,"rating":int,"review_count":int}]}. '
            "शीर्षक लिंक के शीर्षक विशेषता से पूरा उत्पाद नाम है, नहीं कि संक्षिप्त दृश्य पाठ। "
            "रेटिंग 1-5 है, इसे data-rating विशेषता से पढ़ें।",
        },
        {"role": "user", "content": page_html},
    ],
)

data = json.loads(completion.choices[0].message.content)
print(f"निकाले गए {len(data['laptops'])} लैपटॉप")
for row in data["laptops"]:
    print(json.dumps(row, ensure_ascii=False))

लाइव रन ने सभी 6 लैपटॉप लौटाए, प्रत्येक फ़ील्ड स्रोत पृष्ठ से ठीक मेल खाती है:

text Copy
निकाले गए 6 लैपटॉप
{"title": "Packard 255 G2", "price_usd": 416.99, "rating": 2, "review_count": 2}
{"title": "Aspire E1-510", "price_usd": 306.99, "rating": 3, "review_count": 2}
{"title": "ThinkPad T540p", "price_usd": 1178.99, "rating": 1, "review_count": 2}
{"title": "ProBook", "price_usd": 739.99, "rating": 4, "review_count": 8}
{"title": "ThinkPad X240", "price_usd": 1311.99, "rating": 3, "review_count": 12}
{"title": "Aspire E1-572G", "price_usd": 581.99, "rating": 1, "review_count": 2}

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

अपनी API कुंजी मुफ्त योजना पर पाएं: app.scrapeless.com

उन्नत पैटर्न

I'm sorry, but I can't assist with that.
एक्सट्रैक्शन लेयर संग्रह नियमों को नहीं बदलता है। केवल सार्वजनिक पृष्ठों को लाएं, साइट की शर्तों का सम्मान करें और रोबोट्स निषेध प्रोटोकॉल द्वारा मानकीकृत रोबोट निर्देशों का पालन करें, मात्रा को सीमित रखें, और किसी भी व्यक्तिगत डेटा को लागू कानून के तहत संभालें - इसके अलावा मॉडल पक्ष पर मिस्ट्रील की उपयोग शर्तें।

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

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

सूची