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

MechanicalSoup: पायथन में फॉर्म-चालित स्क्रैपिंग स्वचालित करें

Alex Johnson
Alex Johnson

Senior Web Scraping Engineer

29-Jun-2026

TL;DR:

  • MechanicalSoup फॉर्म-प्रेरित साइटों को स्वचालित करता है, requests को BeautifulSoup के साथ जोड़कर। एक StatefulBrowser ऑब्जेक्ट एक पृष्ठ खोलता है, एक फॉर्म का चयन करता है, उसके फील्ड भरता है, इसे सबमिट करता है, और प्रतिक्रिया को पार्स करता है - कोई ब्राउज़र प्रक्रिया और कोई JavaScript इंजन नहीं।
  • ब्राउज़र आपके लिए प्रत्येक अनुरोध के बीच कुकीज़ और सत्र स्थिति रखता है। एक लॉगिन या Set-Cookie के बाद, वही StatefulBrowser संग्रहीत कुकी को प्रत्येक बाद के अनुरोध पर वापस भेजता है, इसलिए बहु-चरण प्रक्रियाएं एक वास्तविक सत्र की तरह व्यवहार करती हैं।
  • select_form और डिक्शनरी-शैली फील्ड असाइनमेंट पूरी एपीआई सतह है। आप CSS चयनकर्ता द्वारा एक फॉर्म को लक्षित करते हैं, सेट करते हैं browser["fieldname"] = value, और submit_selected() को कॉल करते हैं - पुस्तकालय एनकोडिंग और रीडायरेक्ट को संभालता है।
  • MechanicalSoup केवल वही HTML पढ़ता है जो सर्वर वापस करता है - यह JavaScript निष्पादित नहीं करता है। एक पृष्ठ जो अपने सामग्री को क्लाइंट-साइड बनाता है वह खाली वापस आता है, क्योंकि HTTP प्रतिक्रिया और BeautifulSoup के बीच कोई DOM रेंडर चरण नहीं है।
  • जब एक पृष्ठ रेंडरिंग की आवश्यकता होती है या एक बॉट चुनौती को ट्रिप करता है, तो स्क्रैपलेस स्क्रैपिंग ब्राउज़र को फेच सौंपें और BeautifulSoup के साथ पार्सिंग करना जारी रखें। Scrapeless SDK एक क्लाउड सत्र बनाता है, प्ले राइट इसे CDP के माध्यम से चलाता है ताकि JavaScript को चलाया जा सके, और रेंडर किया गया HTML उसी soup.select(...) चयनकर्ताओं में सीधे वापस आता है।
  • शुरू करने के लिए मुफ्त। नए Scrapeless अकाउंट में मुफ्त स्क्रैपिंग ब्राउज़र रuntime शामिल हैं - app.scrapeless.com पर साइन अप करें।

भूमिका: फॉर्म अभी भी उस अधिकांश स्क्रैपिंग कार्य के पीछे होते हैं

उपयोगी डेटा का एक बड़ा हिस्सा एक फॉर्म के पीछे बैठता है - एक खोज बॉक्स, एक लॉगिन, एक फ़िल्टर पैनल, एक बहु-पृष्ठ विज़ार्ड। MechanicalSoup बिल्कुल उसी प्रकार की वेबसाइट के लिए मौजूद है। यह requests HTTP लाइब्रेरी और BeautifulSoup को एकल स्टेटफुल ब्राउज़र ऑब्जेक्ट में लपेटता है: यह एक पृष्ठ लाता है, आपको उस पर HTML फॉर्म भरने और सबमिट करने की अनुमति देता है, रीडायरेक्ट का पालन करता है, और जो कुछ भी वापस आता है उसे पार्स करता है। कोई Selenium नहीं, कोई Chromium नहीं, कोई ड्राइवर बाइनरी नहीं।

सरलीकरण इसे तेज रखता है, और यह उस पर एक कठोर रेखा भी खींचता है जो पुस्तकालय पहुंच प्राप्त कर सकता है। MechanicalSoup HTTP अर्थविज्ञान बोलता है और HTML को पार्स करता है। यह कभी भी पृष्ठ के JavaScript को नहीं चलाता, इसलिए जो कुछ भी क्लाइंट-साइड पर रेंडर किया गया है - एक अनंत-स्क्रॉल फीड, एक React परिणाम सूची, एक खोज बॉक्स जो XHR के माध्यम से परिणाम लाता है - वह उसी खाली खोल के रूप में वापस आता है जो सर्वर पहली बार भेजा था। यह एक सर्वर-रेंडर किए गए फॉर्म पर तेज रहता है और एक क्लाइंट-रेंडर किए गए पर अंधा हो जाता है।

यह गाइड एक वास्तविक MechanicalSoup कार्यप्रवाह को अंत से अंत तक चलाता है - स्थापित करना, एक पृष्ठ खोलना, एक फॉर्म भरना और सबमिट करना, एक सत्र में कुकीज़ ले जाना, और परिणामों को स्क्रैप करना - फिर ईमानदार सीमा दिखाता है। जब एक लक्ष्य ब्राउज़र में रेंडर होता है या सक्रिय एंटी-बॉट चुनौती के पीछे होता है, तो फेच Scrapeless Scraping Browser को Chrome DevTools प्रोटोकॉल के पार ले जाता है, जबकि आपकी BeautifulSoup पार्सिंग कोड वैसा ही रहता है जैसा था।


इसके साथ आप क्या कर सकते हैं

  • लॉगिन फॉर्म सबमिट करें और प्रमाणित रहें। उपयोगकर्ता नाम और पासवर्ड फील्ड भरें, सबमिट करें, और StatefulBrowser हर पृष्ठ के लिए सत्र कुकीज़ रखता है।
  • खोज और फ़िल्टर फॉर्म को चलाएं। एक खोज फ़ील्ड सेट करें, सबमिट करें, और सर्वर द्वारा लौटाए गए परिणाम पंक्तियों को पार्स करें - क्लासिक खोज-और-स्क्रैप लूप।
  • बहु-पृष्ठ प्रवाह में चलें। एक ब्राउज़र ऑब्जेक्ट में लिंक का पालन करें और लगातार फॉर्म सबमिट करें, कुकी जार और रेफरर स्वचालित रूप से ले जाएं।
  • सर्वर-रेंडर किए गए टेबल और सूचियाँ पढ़ें। कच्चे HTML में जो कुछ भी मौजूद है - मूल्य निर्धारण तालिकाएँ, लिस्टिंग, निर्देशिका पृष्ठ - एक soup.select() दूर है।
  • रिपेटिटिव सबमिशन को स्क्रिप्ट करें। विभिन्न फील्ड मानों के साथ उसी फॉर्म को फिर से चलाएं ताकि बिना वास्तविक ब्राउज़र को छुए प्रश्नों के एक कैटलॉग को साफ किया जा सके।

Scrapeless Scraping Browser क्यों

Scrapeless Scraping Browser एक कस्टमाइज़ेबल, एंटी-डिटेक्शन क्लाउड ब्राउज़र है जो वेब क्रॉलर्स और AI एजेंटों के लिए डिज़ाइन किया गया है। उन पृष्ठों के लिए जिन्हें MechanicalSoup स्वयं नहीं पहुंच सकता, यह लाता है:

  • क्लाउड-साइड JavaScript रेंडरिंग - पृष्ठ के स्क्रिप्ट दूरस्थ ब्राउज़र पर चलते हैं, इसलिए क्लाइंट-बिल्ट सामग्री HTML में होती है जब आप इसे पार्स करते हैं।
  • 195+ देशों में आवासीय प्रॉक्सी - proxy_country के साथ इग्रेस को पिन करें ताकि भू-गेटेड पृष्ठ और क्षेत्र-लॉकेड फॉर्म सामग्री प्रदान करें जैसा कि वे स्थानीय दर्शक को करेंगे।
  • एंटी-डिटेक्शन फिंगरप्रिंटिंग - सत्र एक वास्तविक ब्राउज़र के रूप में प्रस्तुत होता है, इसलिए फॉर्म या परिणाम पृष्ठ रेंडर होता है बजाय इसके कि चुनौती इंटरस्टिशियल वापस करे।
  • सत्र स्थिरता - कुकीज़ और प्रमाणीकरण स्थिति एक सत्र के भीतर नेविगेशनों के बीच गर्म रहती हैं, यही गुण MechanicalSoup आपको स्थानीय रूप से देता है।
  • एक मानक CDP एंडपॉइंटbrowser_ws_endpoint एक साधारण WebSocket URL है, इसलिए Playwright (या कोई भी CDP क्लाइंट) एक कॉल के साथ जुड़ता है और आपका पार्सिंग कोड अपरिवर्तित रहता है।

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


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

  • Python 3.10 या नया
  • एक Scrapeless खाता और API कुंजी — app.scrapeless.com पर साइन अप करें (केवल क्लाउड-ब्राउज़र अनुभाग के लिए आवश्यक)
  • CSS सेलेक्टर और टर्मिनल के साथ बुनियादी परिचय

इंस्टॉल करें

MechanicalSoup एकल पैकेज है जो requests और beautifulsoup4 को निर्भरता के रूप में खींचता है:

bash Copy
pip install mechanicalsoup

इंस्टॉल और संस्करण की पुष्टि करें:

bash Copy
python -c "import mechanicalsoup; print(mechanicalsoup.__version__)"
# 1.4.0

कॉन्फ़िगर करें: एक StatefulBrowser के साथ एक पृष्ठ खोलें

MechanicalSoup में सब कुछ एक StatefulBrowser के माध्यम से चलता है। यह वर्तमान पृष्ठ, सत्र, और कुकी जार को रखता है। निर्माण के समय एक उपयोगकर्ता एजेंट सेट करें ताकि अनुरोध एक उचित पहचान ले सकें:

python Copy
import mechanicalsoup

browser = mechanicalsoup.StatefulBrowser(
    user_agent="Mozilla/5.0 (compatible; data-collector)"
)

browser.open("https://httpbingo.org/forms/post")
# browser.page अब एक BeautifulSoup ऑब्जेक्ट है जिसे आप सीधे क्वेरी कर सकते हैं

browser.open() requests प्रतिक्रिया लौटाता है; browser.page पृष्ठ के लिए पार्स किया गया BeautifulSoup ट्री है जिसे आपने अभी लोड किया।


बुनियादी कार्यान्वयन: एक फॉर्म को भरें और सबमिट करें

मुख्य लूप तीन कॉल हैं — फॉर्म का चयन करें, इसके क्षेत्रों को असाइन करें, सबमिट करें। select_form एक CSS सेलेक्टर लेता है; फील्ड असाइनमेंट ब्राउज़र पर डिक्शनरी-शैली में होती है; submit_selected() फॉर्म को पोस्ट करता है और रीडायरेक्ट का पालन करता है।

python Copy
import mechanicalsoup

browser = mechanicalsoup.StatefulBrowser(
    user_agent="Mozilla/5.0 (compatible; data-collector)"
)
browser.open("https://httpbingo.org/forms/post")

# इसके क्रिया द्वारा फॉर्म को लक्षित करें, फिर नाम द्वारा क्षेत्रों को भरें
browser.select_form('form[action="/post"]')
browser["custname"] = "Ada Lovelace"
browser["custtel"] = "555-0100"
browser["custemail"] = "ada@example.com"
browser["size"] = "medium"             # रेडियो बटन
browser["topping"] = ["bacon", "cheese"]  # मल्टी-वैल्यू चेकबॉक्स
browser["comments"] = "Leave at door"

response = browser.submit_selected()
print(response.status_code)
data = response.json()
print(data["url"])
print(data["form"])

httpbin एंडपॉइंट पार्स किए गए फॉर्म बॉडी को इको करता है, जो यह पुष्टि करता है कि MechanicalSoup ने वास्तव में क्या भेजा:

json Copy
{
  "url": "https://httpbingo.org/post",
  "form": {
    "comments": "Leave at door",
    "custemail": "ada@example.com",
    "custname": "Ada Lovelace",
    "custtel": "555-0100",
    "delivery": "",
    "size": "medium",
    "topping": ["bacon", "cheese"]
  }
}
// मान वास्तविक सबमिशन को दर्शाते हैं; खाली "delivery" एक सेट न किया गया क्षेत्र है फॉर्म पर।

रेडियो बटन एकल स्ट्रिंग लेते हैं, चेकबॉक्स समूह एक सूची लेते हैं, और कोई भी क्षेत्र जो सेट नहीं किया गया है उसे खाली भेजा जाता है — वही एन्कोडिंग जो एक ब्राउज़र उत्पन्न करेगा।


उन्नत पैटर्न

एक सत्र के पार कुकीज़ ले जाएँ

एक StatefulBrowser एक requests.Session का पुन: उपयोग करता है, इसलिए सर्वर द्वारा सेट की गई कोई भी कुकी स्वचालित रूप से बाद के अनुरोधों पर बनी रहती है। यही है जो लॉगिन और मल्टी-स्टेप फ्लोज़ को काम करता है:

python Copy
import mechanicalsoup

browser = mechanicalsoup.StatefulBrowser()

# सर्वर इस अनुरोध पर एक कुकी सेट करता है
browser.open("https://httpbingo.org/cookies/set?session_id=abc123")
print(browser.session.cookies.get_dict())
# {'session_id': 'abc123'}

# एक ही ब्राउज़र में बाद में किए गए अनुरोध पर संग्रहीत कुकी वापस भेजी जाती है
echo = browser.open("https://httpbingo.org/cookies")
print(echo.json())
# {'cookies': {'session_id': 'abc123'}}

एक वास्तविक लॉगिन के लिए, पहले लॉगिन फॉर्म सबमिट करें, फिर उसी browser ऑब्जेक्ट का उपयोग करना जारी रखें — प्रमाणीकरण कुकी हर बाद के पृष्ठ पर सवारी करती है।

एक खोज फॉर्म सबमिट करें और परिणामों को स्क्रैप करें

एक GET खोज फॉर्म वही पैटर्न है: क्वेरी क्षेत्र सेट करें, सबमिट करें, browser.page से परिणाम पंक्तियों को पार्स करें।

python Copy
import mechanicalsoup

browser = mechanicalsoup.StatefulBrowser(
    user_agent="Mozilla/5.0 (compatible; data-collector)"
)
browser.open("https://www.scrapethissite.com/pages/forms/")

browser.select_form('form[action="/pages/forms/"]')
browser["q"] = "boston"
browser.submit_selected()
print(browser.url)  # https://www.scrapethissite.com/pages/forms/?q=boston

rows = browser.page.select("table.table tr.team")
print(f"{len(rows)} rows")
for row in rows[:3]:
    name = row.select_one(".name").get_text(strip=True)
    year = row.select_one(".year").get_text(strip=True)
    wins = row.select_one(".wins").get_text(strip=True)
    print(name, year, "wins:", wins)

क्योंकि परिणाम पृष्ठ सर्वर-रेंडर किया गया है, पंक्तियाँ उसी HTML में हैं जो MechanicalSoup पहले से ही रखता है — कोई दूसरी खींचने की आवश्यकता नहीं है।
اپنی API کلید مفت منصوبے پر حاصل کریں: app.scrapeless.com


جہاں MechanicalSoup رک جاتا ہے: صفحات جو براؤزر میں رینڈر ہوتے ہیں

MechanicalSoup BeautifulSoup کو صرف وہی دیتا ہے جو سرور نے HTTP کے ذریعہ واپس کیا — کچھ نہیں۔ جب ایک صفحہ اپنے مواد کو کلائنٹ سائیڈ جاوا اسکرپٹ کے ساتھ بناتا ہے، تو وہ خام HTML ایک خالی شیل ہوتا ہے، اور سیلیکٹرز کچھ نہیں پا پاتے:

python Copy
import mechanicalsoup

browser = mechanicalsoup.StatefulBrowser()
browser.open("https://quotes.toscrape.com/js/")
quotes = browser.page.select(".quote .text")
print("MechanicalSoup اقتباسات ملی:", len(quotes))
# MechanicalSoup اقتباسات ملی: 0

زیرو۔ اس صفحے کا /js/ متغیر جاوا اسکرپٹ کے ذریعے اقتباسات کو لوڈ کے بعد داخل کرتا ہے، لہذا سرور کے HTML میں BeautifulSoup کے میل کھانے کے لیے کچھ نہیں ہوتا۔ اسی دیوار کا سامنا ان صفحات کے سامنے آتا ہے جو اینٹی بوٹ چیلنج پر گزرنے کے ساتھ یا صرف رہائشی IP کو مواد فراہم کرتے ہیں — جن میں سے کوئی بھی HTTP-only کلائنٹ صاف نہیں کر سکتا۔

اس کا حل آپ کے پہلے سے لکھے ہوئے ہر چیز کو برقرار رکھتا ہے۔ Scrapeless Scraping Browser کو رینڈرنگ کرنے دیں: SDK ایک کلاؤڈ سیشن بناتا ہے، Playwright اس پر CDP کے ذریعے جڑتا ہے اور صفحے کا جاوا اسکرپٹ چلاتا ہے، اور آپ رینڈر شدہ HTML کو براہ راست ایک ہی BeautifulSoup سیلیکٹرز میں منتقل کرتے ہیں۔

SDK اور Playwright کلائنٹ کو انسٹال کریں، پھر براؤزر بائنری حاصل کریں جسے Playwright چلاتا ہے:

bash Copy
pip install scrapeless playwright beautifulsoup4
python -m playwright install chromium

اپنی کلید کو ماحول میں سیٹ کریں — کبھی بھی اسے ہارڈ کوڈ نہ کریں:

bash Copy
export SCRAPELESS_API_KEY="your_api_token_here"

اب صفحے کو کلاؤڈ سائیڈ پر رینڈر کریں اور نتیجہ مقامی طور پر پارس کریں:

python Copy
import os
from scrapeless import Scrapeless
from scrapeless.types import ICreateBrowser
from playwright.sync_api import sync_playwright
from bs4 import BeautifulSoup

client = Scrapeless()  # ماحول سے SCRAPELESS_API_KEY پڑھتا ہے

# کلاؤڈ سیشن بنائیں؛ جغرافیائی صفحات کے لیے USA رہائشی ایگریس کو پن کریں
session = client.browser.create(ICreateBrowser(
    session_name="mechanicalsoup-guide",
    session_ttl=180,
    proxy_country="US",
))

with sync_playwright() as p:
    # browser_ws_endpoint ایک معیاری wss:// CDP URL ہے
    browser = p.chromium.connect_over_cdp(session.browser_ws_endpoint)
    page = browser.contexts[0].pages[0]
    page.goto("https://quotes.toscrape.com/js/", wait_until="domcontentloaded")
    page.wait_for_selector(".quote .text")
    html = page.content()
    browser.close()

# وہی BeautifulSoup پارسنگ جو آپ نے MechanicalSoup کے ساتھ استعمال کیا
soup = BeautifulSoup(html, "html.parser")
quotes = soup.select(".quote .text")
print("Scrapeless + BeautifulSoup اقتباسات ملی:", len(quotes))
print(quotes[0].get_text())
# Scrapeless + BeautifulSoup اقتباسات ملی: 10
# “دنیا جیسی ہم نے اسے تخلیق کیا ہے، یہ ہمارے سوچنے کا ایک عمل ہے۔ …”

وہ صفحہ جو MechanicalSoup کو 0 قطاریں واپس کرتا ہے، کلاؤڈ براؤزر کے ذریعے 10 واپس کرتا ہے، کیونکہ جاوا اسکرپٹ حقیقت میں HTML پڑھنے سے پہلے چلتا ہے۔ رینڈرنگ اور ایگریس کلاؤڈ سائیڈ پر منتقل ہوتے ہیں؛ پارسنگ پرت — soup.select(...) — ایک جیسی ہے۔ اسی ترقّی پر لائبریری کے مقامی نقطۂ نظر کے لیے، Scrapling کلاؤڈ-براؤزر گائیڈ ایک ایڈاپٹو-سیلیکٹر فیچر کو اسی browser_ws_endpoint کے ذریعے روٹ کرتی ہے۔


مسئلہ حل کرنا

علامت سبب حل
LinkNotFoundError select_form پر CSS سیلیکٹر صفحے پر کسی فارم سے میل نہیں کھاتا browser.page.select("form") پرنٹ کریں اور حقیقی action/attributes کو نشانہ بنائیں
نتیجہ سیلیکٹرز ایک خالی فہرست واپس کرتے ہیں صفحہ اپنے مواد کو جاوا اسکرپٹ کے ساتھ رینڈر کرتا ہے اسے کلاؤڈ سائیڈ پر Scraping Browser کے ساتھ رینڈر کریں، پھر واپس کردہ HTML کو پارس کریں
جمع کرانا ایک فیلڈ کو نظرانداز کرتا ہے فیلڈ ایک ریڈیو/چیک باکس ہے جو ایک سٹرنگ یا فہرست کی ضرورت ہے، نہ کہ خالص قیمت ریڈیو کو ایک اکیلی سٹرنگ، چیک باکس گروپوں کے لیے ایک فہرست تفویض کریں
ایک لوگ ان صفحہ لاگ آؤٹ کی طرح کام کرتا ہے ہر مرحلے پر نیا StatefulBrowser (نیا کوکی جار) ایک browser آبجیکٹ کی دوبارہ استعمال کریں تاکہ سیشن کوکی برقرار رہے
صفحہ مواد کے بجائے ایک چیلنج واپس کرتا ہے ایک فعال اینٹی بوٹ یا ایک HTTP-only کلائنٹ پر ایک علاقے کی جانچ proxy_country کو پن کریں اور کلاؤڈ براؤزر کے فنگر پرنٹنگ کو حقیقی صفحہ رینڈر کرنے دیں

نتیجہ: پارسر کو رکھیں، فیچ کو تبدیل کریں

MechanicalSoup बड़े सेट की साइटों के लिए सही उपकरण है जो अभी भी सामान्य HTML और फ़ॉर्म हैं: एक पृष्ठ खोलें, select_form, फ़ील्ड असाइन करें, submit_selected(), और BeautifulSoup से पंक्तियाँ पढ़ें। कुकी जार लॉगिन और मल्टी-स्टेप प्रवाह को अतिरिक्त कोड के बिना काम करता है। इसका एक कठिन सीमा JavaScript है — यह HTML पढ़ता है, इसे प्रदर्शन नहीं करता। जब एक लक्ष्य स्वयं को ब्राउज़र में बनाता है या एंटी-बॉट दीवार के पीछे जाता है, तो सबसे साफ़ समाधान केवल फेच को बदलना है: एक Scrapeless सत्र बनाएं, पृष्ठ को CDP के माध्यम से रेंडर करें, और परिणामी HTML को समान चयनकर्ताओं में डाले। जब पृष्ठ को अपने स्वयं के प्रॉक्सी ईग्रस के साथ पूर्ण हेडलेस ब्राउज़र की आवश्यकता होती है, तो Puppeteer प्रॉक्सी गाइड उसी क्लाउड-पक्षीय पैटर्न को कवर करता है, और Scraping Browser डॉक्स पूर्ण CDP सतह को दस्तावेज़ित करता है। भू-सीमित पृष्ठों के लिए यूएस ईग्रस पिन करें, चरणों के बीच एक सत्र पुनः उपयोग करें, और अनुपस्थित फ़ील्ड को नल करने योग्य मानें।


अपनी एआई-जनित डेटा पाइपलाइन बनाने के लिए तैयार हैं?

हमारे समुदाय में शामिल हों ताकि एक मुफ्त योजना का दावा कर सकें और फ़ॉर्म-स्वचालन और रेंडरिंग पाइपलाइन बनाने वाले डेवलपर्स से कनेक्ट कर सकें: Discord · Telegram

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


सामान्य पूछे जाने वाले प्रश्न

Q: क्या MechanicalSoup JavaScript चलाता है?
नहीं। MechanicalSoup requests और BeautifulSoup को लपेटता है, इसलिए यह केवल उस HTML को देखता है जो सर्वर लौटाता है। क्लाइंट-साइड में अपनी सामग्री बनाने वाले पृष्ठ खाली वापस आते हैं; उन पृष्ठों को एक क्लाउड ब्राउज़र के माध्यम से रेंडर करें और परिणामी HTML को उसी BeautifulSoup चयनकर्ताओं से पार्स करें।

Q: MechanicalSoup लॉगिन और सत्रों को कैसे संभालता है?
एकल StatefulBrowser एक requests.Session का पुनः उपयोग करता है, इसलिए सर्वर द्वारा सेट की गई कोई भी कुकी बाद में हर अनुरोध में स्वचालित रूप से बनी रहती है। एक बार लॉगिन फ़ॉर्म प्रस्तुत करें, फिर उसी ब्राउज़र ऑब्जेक्ट का उपयोग करते रहें और प्रमाणीकरण कुकी साथ में बनी रहती है।

Q: मैं एक पृष्ठ पर एक विशिष्ट फ़ॉर्म का चयन कैसे करूं?
select_form को एक CSS चयनकर्ता पास करें, जैसे browser.select_form('form[action="/post"]')। यदि कोई फ़ॉर्म मेल नहीं खाता है तो आपको LinkNotFoundError मिलता है — वास्तविक विशेषताएँ देखने के लिए browser.page.select("form") को प्रिंट करें और उनमें से एक को लक्षित करें।

Q: क्या MechanicalSoup के साथ किसी साइट को स्क्रैप करना कानूनी है?
सार्वजनिक रूप से दृश्य डेटा को स्क्रैप करना सामान्यतः अनुमेय है, लेकिन नियम क्षेत्राधिकार और साइट की सेवा की शर्तों के अनुसार भिन्न होते हैं। लक्ष्य की सेवा की शर्तों की समीक्षा करें, रोबोट निर्देशों का सम्मान करें, व्यक्तिगत या प्रतिबंधित डेटा से बचें, और किसी भी अस्पष्टता के लिए सलाह लें।

Q: क्या मुझे MechanicalSoup के साथ प्रॉक्सी की आवश्यकता है?
खुले, सर्वर-रेंडर किए गए पृष्ठों के लिए, अक्सर आवश्यकता नहीं होती। उन पृष्ठों के लिए जो क्षेत्र के अनुसार गेट करते हैं या केवल आवासीय आईपी से सामग्री प्रस्तुत करते हैं, अनुरोध को Scrapeless Scraping Browser के माध्यम से भेजें और proxy_country पिन करें ताकि अनुरोध किसी ऐसे आईपी से बाहर जाए जो साइट को विश्वसनीय हो।

Q: क्या मैं क्लाउड ब्राउज़र में जाने पर अपना BeautifulSoup कोड रख सकता हूँ?
हाँ। क्लाउड ब्राउज़र केवल फेच चरण को बदलता है — यह रेंडर किया हुआ HTML वापस करता है, जिसे आप उसी soup.select(...) कॉल के साथ पार्स करते हैं जो आपने MechanicalSoup के साथ उपयोग किया था। पार्सिंग परत नहीं बदलती।

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

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

सूची