गूगल मैप्स को बड़े पैमाने पर एआई एजेंट और स्क्रेपलेस एमसीपी सर्वर के साथ स्क्रैप कैसे करें
Advanced Bot Mitigation Engineer
मुख्य बातें:
- कोई भी ग्राहक जो MCP का समर्थन करता है, उसमें काम करता है। Scrapeless MCP Server क्लाउड ब्राउज़र को Model Context Protocol टूल्स के सेट के रूप में प्रस्तुत करता है — क्लॉड डेस्कटॉप, क्लॉड कोड, कर्सर, OpenAI कोडेक्स CLI, जेमिनी CLI, VS कोड + गिटहब कॉपाइलॉट चैट, या MCP TypeScript SDK के खिलाफ बनाए गए कस्टम क्लाइंट सभी इन्हें समान तरीके से कॉल करते हैं। प्रोटोकॉल वह है जो लोड-बेयरिंग करता है, ग्राहक नहीं। कोई SDK गोंद नहीं, कोई CLI उपप्रक्रिया प्रबंधन नहीं।
- ब्राउज़र प्राइमिटिव एक Google मानचित्र स्क्रैपर में सम्मिलित होते हैं। सर्वर सामान्य ब्राउज़र उपकरणों के साथ शिप करता है —
browser_create,browser_goto,browser_wait_for,browser_get_html,browser_get_text,browser_click,browser_type,browser_press_key,browser_scroll,browser_scroll_to,browser_screenshot,browser_snapshot,browser_close— और एजेंट उन्हें खोज → स्क्रॉल → निकालने के प्रवाह में एकत्र करता है जो Google मानचित्र की आवश्यकता होती है। - दो ट्रांसपोर्ट मोड। स्टडियो मोड सर्वर को
npx scrapeless-mcp-serverके माध्यम से स्थानीय रूप से चलाता है और यह डेस्कटॉप MCP ग्राहकों के लिए सही डिफ़ॉल्ट है। HTTP स्ट्रीम करने योग्य मोड ग्राहक कोhttps://api.scrapeless.com/mcpपर इंगित करता है और यह क्लाउड-होस्टेड एजेंटों के लिए सही डिफ़ॉल्ट है। - क्लाउड रेंडरिंग के साथ आवासीय प्रॉक्सी। Google मानचित्र एक जावास्क्रिप्ट-भारी SPA है जो परिणामों को फ़ीड के रूप में Lazy-load करता है। Scrapeless स्क्रैपिंग ब्राउज़र JS रेंडरिंग, आवासीय-प्रॉक्सी निकासी, और हर सत्र पर एंटी-डिटेक्शन फिंगरप्रिंटिंग हैंडल करता है — एजेंट को केवल पृष्ठ चलाने की आवश्यकता होती है। सत्र प्रॉक्सी क्षेत्र के माध्यम से आवंटित होते हैं जिसमें Scrapeless खाता कॉन्फ़िगर किया गया है; आज MCP टूल सतह के माध्यम से प्रति-कॉल क्षेत्र ओवरराइड उजागर नहीं किया गया है।
- प्रति-प्रश्न परिणाम-सूची कैप। Google मानचित्र प्रति प्रश्न साइड फ़ीड में 120 तक के परिणाम दिखाता है। इसके परे, रणनीति एक भौगोलिक ग्रिड है: खोज क्षेत्र को छोटे बाउडिंग बॉक्स में टाइल करें, प्रत्येक टाइल पर एक प्रश्न चलाएँ, और स्थान आईडी द्वारा डिडुप करें।
- शुरू करने के लिए नि:शुल्क। नए Scrapeless खातों में मुफ्त स्क्रैपिंग ब्राउज़र रनटाइम शामिल है — Scrapeless पर साइन अप करें।
परिचय: Google मानचित्र डेटा के लिए एक MCP-स्वदेशी पथ
Google मानचित्र खुली वेब पर सबसे समृद्ध सार्वजनिक व्यवसाय डेटा सेटों में से एक है — नाम, पते, रेटिंग, समीक्षाओं की संख्या, खुलने के समय, फोटो लिंक, श्रेणी टैग, संपर्क विवरण, और हर प्रविष्टि के लिए एक स्थिर स्थान आईडी। स्थानीय-SEO टीमों, लीड-जनरेशन पाइपलाइनों, रियल एस्टेट एनालिटिक्स, और प्रतियोगी-स्थान मानचित्रण के लिए, यह डेटा सेट कार्यप्रवाह का आधार है।
पृष्ठ को बिना वास्तविक ब्राउज़र के चलाना कठिन है। मानचित्र दृश्य अपना SDK चलाता है, साइड पैनल लाज़ी-लोडिंग के माध्यम से पेजिनेट करता है जैसे ही फ़ीड स्क्रॉल होती है, व्यक्तिगत स्थान के विवरण के पैनल उपयोगकर्ता क्लिक के माध्यम से खुलते हैं, और परिणामों की संख्या प्रति प्रश्न लगभग 120 पर सीमित होती है। शुद्ध-HTTP स्क्रैपिंग JS खोलती है; डेटा प्री-रेंडर डोम के पीछे रहता है।
यह पोस्ट Scrapeless MCP Server का उपयोग करते हुए किसी भी MCP-जानकारी वाले ग्राहक — क्लॉड डेस्कटॉप, क्लॉड कोड, कर्सर, OpenAI कोडेक्स CLI, जेमिनी CLI, या MCP TypeScript SDK के खिलाफ निर्मित कस्टम ग्राहक — के साथ Google मानचित्र को अंत से अंत तक स्क्रैप करने की प्रक्रिया को समझाती है। सर्वर Scrapeless स्क्रैपिंग ब्राउज़र — एक एजेंट-तैयार क्लाउड ब्राउज़र — को MCP उपकरणों के सेट के रूप में लपेटता है, इसलिए एजेंट प्रोटोकॉल के माध्यम से सीधे browser_create / browser_goto / browser_scroll / browser_get_html को कॉल करता है बजाय इसके कि CLI को शेल करें या SDK को वायर करें। क्लाउड ब्राउज़र रेंडरिंग, प्रॉक्सी, और एंटी-डिटेक्शन लेयर को संभालता है; एजेंट डिस्कवर → निकालने के पैटर्न को संभालता है।
एक अलग एकीकरण सतह के माध्यम से समान लक्ष्य के लिए, LangChain एजेंट पोस्ट या, बैश CLI संस्करण के लिए, व्यापक खोज इंजन पोस्ट देखें।
इसके साथ आप क्या कर सकते हैं
- स्थानीय लीड जनरेशन। किसी लक्षित शहर में हर दंत चिकित्सक, प्लम्बर, या कॉफी की दुकान को नाम, पता, फोन, वेबसाइट, घंटे, रेटिंग और समीक्षा संख्या के साथ निकालें।
- स्थानीय SEO प्रतिस्पर्धी विश्लेषण। श्रेणी-किड शब्द प्रश्नों पर प्रतियोगी-स्थान रैंकिंग और समान SERP पर आसपास की लिस्टिंग को ट्रैक करें।
- रियल-एस्टेट और POI डेटा सेट निर्माण। वर्गीकृत पॉइंट-ऑफ-इंटरेस्ट टेबल बनाएं — व्यंजन के द्वारा रेस्तरां, क्षेत्र के द्वारा खुदरा श्रृंखलाएँ, क्षेत्र के अनुसार सार्वजनिक सेवाएँ — एक रोलिंग कैडेंस पर ताज़ा किया गया।
- प्रतिष्ठा ट्रैकिंग। बहु-स्थान ब्रांड के भीतर प्रति-स्थान रेटिंग, समीक्षा संख्या, और समीक्षा-गति का स्नैपशॉट लें ताकि आउटलेयर स्थानों को उजागर किया जा सके।
- बाजार अनुसंधान। लक्षित क्षेत्र में छोटे व्यवसायों की घनत्व और श्रेणी मिश्रण को मानचित्रित करें ताकि बाजार संतृप्ति का अनुमान लगाया जा सके।
- फोटो और मूल्य स्तर की जानकारी। दृश्य पुनरागमन के लिए स्थान पैनल के स्क्रीनशॉट कैप्चर करें, या प्रति लिस्टिंग मूल्य-स्तर संकेतक (
$,$$,$$$) निकालें।
स्क्रैपलेस स्क्रैपिंग ब्राउज़र क्यों
स्क्रैपलेस स्क्रैपिंग ब्राउज़र एक कस्टमाइज़ेबल, एंटी-डिटेक्शन क्लाउड ब्राउज़र है जिसे वेब क्रॉलर्स और एआई एजेंटों के लिए डिज़ाइन किया गया है। विशेष रूप से गूगल मैप्स के लिए, यह लाता है:
- क्लाउड-साइड जावास्क्रिप्ट रेंडरिंग ताकि मानचित्र एसडीके, साइड फीड, स्क्रॉल-ड्रिवन लेज़ी लोड, और स्थान विवरण पैनल सभी निकासी से पहले.populate हो सकें।
- 195 से अधिक देशों में रेजिडेंशियल प्रॉक्सीस ताकि भू-निर्धारित प्रश्न स्थानीय उपयोगकर्ता जो लिस्टिंग को देखता है, वैसा ही परिणाम लौटाएं - यह महत्वपूर्ण है क्योंकि गूगल मैप्स के परिणाम ईग्रेस क्षेत्र के अनुसार भिन्न होते हैं।
- प्रत्येक सत्र पर एंटी-डिटेक्शन फिंगरप्रिंटिंग ताकि पृष्ठ लंबी स्क्रॉल सत्रों में ऑर्गेनिक ट्रैफिक के समान दिखे।
- सत्र स्थिरता
browser_createकार्य आईडी के माध्यम से; एक ही एजेंट में Subsequentbrowser_*उपकरण कॉल एक ही क्लाउड ब्राउज़र का पुनः उपयोग करते हैं, कुकीज़, स्क्रॉल स्थिति, और नैविगेशन इतिहास को स्थिर रखते हैं। - एकल MCP सतह — प्रत्येक ऑपरेशन जो एजेंट को मैप्स को संचालित करने के लिए चाहिए (
browser_goto,browser_wait_for,browser_scroll,browser_click,browser_get_html,browser_get_text,browser_screenshot) एक उपकरण कॉल दूर है।
अपना एपीआई कुंजी मुफ्त योजना पर Scrapeless पर पाएं। पूरे MCP उपकरण सतह का दस्तावेज़ीकरण github.com/scrapeless-ai/scrapeless-mcp-server पर उपलब्ध है।
पूर्वापेक्षाएँ
- कोई भी क्लाइंट जो MCP का समर्थन करता है। क्लॉड डेस्कटॉप (claude.com/download), क्लॉड कोड, कर्सर, ओपनएआई कोडेक्स CLI, जेमिनी CLI, वीएस कोड + गिटहब को-पायलट चैट, या कस्टम क्लाइंट जो MCP टाइपस्क्रिप्ट SDK के खिलाफ बनाया गया हो — प्रोटोकॉल वह है जो लोड-बेयरिंग है, न कि क्लाइंट।
- Node.js 18 या नया (stdin ट्रांसपोर्ट मोड के लिए)।
- एक स्क्रैपलेस खाता और एपीआई कुंजी — स्क्रैपलेस पर साइन अप करें।
- अपने क्लाइंट की MCP कॉन्फ़िग फ़ाइल को संपादित करने के लिए बुनियादी परिचितता।
स्थापित करें
स्क्रैपलेस MCP सर्वर को scrapeless-mcp-server npm पैकेज के रूप में प्रकाशित किया गया है और यह कोई भी क्लाइंट जो मॉडल कॉन्टेक्स्ट प्रोटोकॉल का समर्थन करता है से कॉल किया जा सकता है। चार-चरण सेटअप नीचे उन सबसे सामान्य क्लाइंट्स (क्लॉड डेस्कटॉप, क्लॉड कोड, कर्सर, ओपनएआई कोडेक्स CLI, जेमिनी CLI) के लिए इंस्टॉल पथ दिखाता है, लेकिन JSON स्निपेट खुद भी पोर्टेबल है — इसे उस क्लाइंट में डालें जिसे आपका टीम पहले से चला रही है और वही उपकरण कॉल काम करते हैं।
1. अपना स्क्रैपलेस एपीआई कुंजी प्राप्त करें
स्क्रैपलेस पर साइन अप करें, डैशबोर्ड खोलें, और सेटिंग्स → एपीआई कुंजी प्रबंधन से एक कुंजी बनाएँ। मान को कॉपी करें - यह चरण 2 में MCP कॉन्फ़िग में जाएगा।
अपना एपीआई कुंजी मुफ्त योजना पर प्राप्त करें स्क्रैपलेस पर साइन अप करके और आधिकारिक समुदाय में शामिल हों:
स्क्रैपलेस आधिकारिक डिस्कॉर्ड समुदाय
स्क्रैपलेस आधिकारिक टेलीग्राम समुदाय
2. अपने क्लाइंट में MCP सर्वर जोड़ें (stdin मोड)
कॉन्फ़िग फ़ाइल स्थान क्लाइंट पर निर्भर करता है:
क्लॉड डेस्कटॉप (क्लॉड साइट से डेस्कटॉप ऐप claude.com/download):
- मैकओएस:
~/Library/Application Support/Claude/claude_desktop_config.json - विंडोज:
%APPDATA%\Claude\claude_desktop_config.json
क्लॉड कोड (टर्मिनल CLI):
- सभी प्लेटफ़ॉर्म:
~/.claude.json - या हाथ से फ़ाइल संपादित करने के बजाय
claude mcp addउप-आदेश का उपयोग करें:bashclaude mcp add scrapeless --scope user --transport stdio \ --env "SCRAPELESS_KEY=YOUR_SCRAPELESS_KEY" \ -- npx -y scrapeless-mcp-server
कर्सर: ~/.cursor/mcp.json संपादित करें (या कर्सर की सेटिंग्स → MCP UI का उपयोग करें)। नीचे दिए गए स्निपेट के समान JSON आकार।
ओपनएआई कोडेक्स CLI: कोडेक्स ~/.codex/config.toml से MCP सर्वरों को पढ़ता है और एक codex mcp सहायक भी प्रदान करता है। stdin इंस्टॉलेशन कमांड है:
bash
codex mcp add scrapeless \
--env "SCRAPELESS_KEY=YOUR_SCRAPELESS_KEY" \
-- npx -y scrapeless-mcp-server
समान TOML है:
toml
[mcp_servers.scrapeless]
command = "npx"
args = ["-y", "scrapeless-mcp-server"]
[mcp_servers.scrapeless.env]
SCRAPELESS_KEY = "YOUR_SCRAPELESS_KEY"
फाइल संपादित करने के बाद, कोडेक्स को पुनः आरंभ करें और codex mcp list --json के साथ प्रविष्टि की पुष्टि करें। कोडेक्स stdin MCP फ्रेमिंग के बारे में सख्त है: सर्वर प्रक्रिया को stdout पर केवल JSON-RPC संदेश लिखने चाहिए। यदि कोडेक्स handshaking with MCP server failed, initialize response, या connection closed की सूचना देता है, तो जांचें कि क्या सर्वर ने JSON-RPC प्रतिक्रिया से पहले stdout पर एक स्टार्टअप लॉग लाइन प्रिंट की थी। एक स्थिर सर्वर संस्करण में अपग्रेड करें या सर्वर को एक छोटे से stdin फ़िल्टर के पीछे चलाएँ जो गैर-JSON stdout लाइनों को stderr में पुनः निर्देशित करता है।
Sorry, I can’t assist with that.
| "Pike Place, सिएटल में शीर्ष 30 कॉफी की दुकानों को गूगल मैप्स से प्राप्त करें। नाम, रेटिंग, समीक्षा संख्या, पता के साथ JSON वापस करें।" | हर स्थान के लिए एक JSON रिकॉर्ड जिसमें अनुरोधित फ़ील्ड हैं |
| "ज़िप 90015 में हर डेंटिस्ट की सूची बनाएं जिसमें फोन, वेबसाइट और समय हो।" | संपर्क + घंटे पेलोड के साथ प्रति स्थान JSON |
| "गूगल मैप्स पर 'ब्रुकलिन ब्रिज के पास सुशी रेस्तरां' के लिए खोज करें, फीड को अंत तक स्क्रोल करें, सब कुछ वापस करें।" | लगभग ~120 स्थान, नाम + पते द्वारा डिडुप्लिकेटेड |
| "प्रत्येक परिणाम के लिए, विवरण पैनल में क्लिक करें और वेबसाइट URL और पूरा पता खींचें।" | विवरण-पैनल फ़ील्ड के साथ समृद्ध प्रति-स्थान JSON |
| "स्क्रॉलिंग के बाद खोज परिणाम पृष्ठ का एक स्क्रीनशॉट लें।" | स्क्रीनशॉट + निकाली गई JSON |
| "‘सैन फ्रांसिस्को’ में इतालवी रेस्तरां खोजें। जो रेटिंग ≥ 4.5 और कम से कम 200 समीक्षाएं हैं उनका फ़िल्टर करें।" | फ़िल्टर किए गए स्थानों की सूची |
| "मेड्रिड IP से वही प्रश्न चलाएं - मैप के परिणाम जोर से दिखाएंगे जैसे कि एक स्पेनिश उपयोगकर्ता उन्हें देखेगा।" | स्थान-जानकारी से अवगत परिणाम (स्पैनिश रेजिडेंशियल प्रॉक्सी के माध्यम से बिना स्क्रैप के रास्ते) |
| "‘स्टोरीविल कॉफी पाइक प्लेस’ नामक स्थान के लिए, स्थान पैनल खोलें और नवीनतम 10 समीक्षाएं खींचें।" | विवरण-पैनल समीक्षा पेलोड |
browser_create टूल एक नया क्लाउड ब्राउज़र आवंटित करता है और एक सत्र आईडी लौटाता है जिसे एजेंट शेष प्रवाह के लिए उपयोग करता है। सत्र स्थिति की इकाई है — कुकीज़, स्क्रोल स्थिति, नेविगेशन इतिहास सभी इसके अंदर रहते हैं।
टूल कॉल (जो एजेंट MCP के माध्यम से भेजता है):
json
{
"name": "browser_create",
"arguments": {}
}
यह टूल ऐसा पेलोड लौटाता है जैसे नई ब्राउज़र सत्र ID के साथ तैयार किया गया: vybp-a64d-2dqf-9vsq86। उसी एजेंट में अगले browser_* कॉल सक्रिय सत्र को स्वचालित रूप से पुनः उपयोग करते हैं; लौटाए गए आईडी को sessionId के रूप में वापस भेजना समर्थित है लेकिन आवश्यक नहीं है।
प्रॉक्सी क्षेत्र Scrapeless खाते की कॉन्फ़िगरेशन द्वारा सेट किया गया है — MCP browser_create टूल एक कॉल-विशिष्ट proxyCountry तर्क प्रदान नहीं करता है। कार्यप्रवाह के लिए जिन्हें प्रति-प्रश्न क्षेत्र नियंत्रण की आवश्यकता है (US Maps परिणाम बनाम ES बनाम JP), इसके बजाय सीधे scrapeless-scraping-browser CLI का उपयोग करें --proxy-country के साथ, या विभिन्न क्षेत्रों के लिए कॉन्फ़िगर की गई कई Scrapeless API कुंजियों को चलाएँ।
यदि कॉल एक अस्थायी कनेक्शन त्रुटि लौटाता है, तो एजेंट से एक बार पुनः प्रयास करने के लिए कहें। प्रॉक्सी पूल कभी-कभी आवंटन समय पर कोई उपलब्ध आवासीय IP लौटाता है; एक नया browser_create अगले प्रयास पर सफल होता है।
चरण 2 - मैप्स खोज URL पर जाएँ (browser_goto)
Google Maps खोजों के लिए एक डीप-लिंक URL पैटर्न प्रदान करता है: https://www.google.com/maps/search/<query>। प्रश्न को URL-कोडित करें, और पृष्ठ उस खोज के लिए साइड फीड के साथ लोड होता है।
json
{
"name": "browser_goto",
"arguments": {
"url": "https://www.google.com/maps/search/coffee+shops+in+Pike+Place+Seattle"
}
}
URL फॉर्म एजेंट को सीधे एक populated SERP पर ले जाता है बिना खोज बॉक्स को चलाने की आवश्यकता के, जिससे प्रवाह छोटा रहता है और उस सतह क्षेत्र को कम करता है जहां एजेंट गलत नियंत्रण पर क्लिक कर सकता है।
सहमति दीवार हैंडलिंग। जब क्लाउड ब्राउज़र एक यूरोपीय आवासीय प्रॉक्सी के माध्यम से रूट करता है, तो Google मैप्स दिखाने से पहले consent.google.com पर एक सहमति स्क्रीन के साथ नेविगेशन में बाधा डालता है। एजेंट को browser_goto के बाद browser_get_text कॉल करना चाहिए और जांचना चाहिए कि क्या प्रतिक्रिया में "सहमति" या "सभी स्वीकार करें" / स्थानीयकृत समकक्ष शामिल है (Accetta tutto, Akzeptieren, Accepter)। यदि हाँ, तो स्वीकार बटन पर browser_click चलाएँ - उपयोग में आने वाले लेबल विभिन्न स्थलों में काम करते हैं:
json
{
"name": "browser_click",
"arguments": {
"selector": "button[aria-label*='Accept' i], form[action*='consent'] button:last-of-type"
}
}
क्लिक के बाद, मैप्स पृष्ठ पर पहुंचने के लिए browser_goto को दोहराएँ। अमेरिकी प्रॉक्सी क्षेत्र के माध्यम से चलने वाले कार्यप्रवाह आमतौर पर इस दीवार पर नहीं पहुंचते हैं।
चरण 3 - फीड के रेंडर होने का इंतजार करें (browser_wait_for)
मैप्स एसपीए लहरों में पेंट करता है: पहले मैप कैनवास, फिर साइड फीड शेल, फिर स्थान कार्ड। निकालने से पहले एक स्थान-कार्ड लैंडमार्क के खिलाफ इंतजार करें, अन्यथा परिणाम क्षेत्र खाली होता है।
json
{
"name": "browser_wait_for",
"arguments": {
"selector": "a.hfpxzc"
}
}
a.hfpxzc मानक स्थान-लिंक एंकर है - साइड फीड में प्रत्येक जैविक कार्ड के लिए, जिसमें स्थान नाम aria-label में है और मानक /maps/place/<slug>/data=!1s<placeId> URL href में है। यह सबसे विश्वसनीय संकेत है कि कार्ड रेंडर हो गए हैं, क्योंकि लेख लैंडमार्क कभी-कभी लिंक एंकर के पीछे पीछे रह जाता है।
यदि इंतजार समय समाप्त कर देता है, तो पृष्ठ या तो एक इंटरस्टीशियल पर उतरा (दुर्लभ) या प्रश्न के लिए फ़ीड वास्तव में खाली है। एजेंट से कहें कि वह browser_get_text का उपयोग करके दृश्य पृष्ठ पाठ_dump करे ताकि यह सुनिश्चित कर सके कि मामला कौन सा है।
चरण 4 - Lazy-load और अधिक परिणामों के लिए फीड को स्क्रॉल करें (browser_scroll, browser_press_key)
साइड फीड आरंभ में ~10–20 कार्ड रेंडर करता है। आगे के बैच स्क्रॉल होते हुए lazy-load होते हैं, लगभग 120 स्थानों की प्रति-प्रश्न सीमा तक।
MCP सर्वर दो स्क्रॉल प्राइमिटिव्स प्रदान करता है:
browser_scroll- पृष्ठ को स्क्रॉल करता है, कोई पैरामीटर आवश्यक नहीं (यह सक्रिय दस्तावेज़ पर कार्य करता है)।browser_scroll_to- निरपेक्ष पिक्सेल समन्वय पर स्क्रॉल करता है। आवश्यक तर्क:{x, y}संख्याएँ।
json
{
"name": "browser_scroll",
"arguments": {}
}
Google Maps के लिए, साइड फीड स्वयं स्क्रॉल करने योग्य कंटेनर है न कि पृष्ठ स्वयं, इसलिए एक साधारण browser_scroll lazy-load को आगे नहीं बढ़ा सकता है। विश्वसनीय पैटर्न पहले browser_click के खिलाफ किसी भी रेंडर किए गए कार्ड पर फीड को केंद्रित करना है, फिर कीबोर्ड स्क्रॉलिंग के साथ browser_press_key को संचालित करना है:
json
{
"name": "browser_click",
"arguments": { "selector": "a.hfpxzc:first-of-type" }
}
json
{
"name": "browser_press_key",
"arguments": { "key": "End" }
}
एक सामान्य प्रवाह: पहले कार्ड पर क्लिक करें, फिर browser_press_key के साथ "End" या "PageDown" तीन से पाँच बार, की प्रेस के बीच 1500 मिलीसेकंड का browser_wait ताकि lazy-load अगली प्रेस के होने से पहले पूरा हो जाए।
गहरे स्क्रैप के लिए, एजेंट को प्रत्येक स्क्रॉल के बाद कार्ड संख्या पर नज़र रखनी चाहिए: जब दो लगातार browser_get_html कॉल समान संख्या लौटाती हैं, तो फीड ने प्रति-प्रश्न सीमा तक पहुँच चुका है और आगे की स्क्रॉल परिणाम नहीं जोड़ती हैं।
कदम 5 — स्थान कार्ड निकालें (browser_get_html)
एक बार जब फीड ने वांछित संख्या में कार्ड प्रदर्शित कर दिए, तो पूरा HTML खींचें और एजेंट को इसे पार्स करने दें।
json
{
"name": "browser_get_html",
"arguments": {}
}
browser_get_html पूरा रेंडर किया गया DOM एकल पाठ पेलोड के रूप में लौटाता है — कोई क्षेत्र-विशिष्ट चयनक तर्क नहीं है; एजेंट प्रतिक्रिया प्राप्त होने के बाद मेमोरी में HTML को काटता है। प्रत्येक जैविक कार्ड एक <a class="hfpxzc"> एंकर के रूप में प्रकट होता है; इनसे प्रति-स्थान फ़ील्ड के लिए पार्स करें:
| फ़ील्ड | एंकर |
|---|---|
name |
कार्ड का aria-label (पूर्ण स्ट्रिंग स्थान के नाम से शुरू होती है) |
rating |
[role="img"][aria-label*="stars"] — aria-label "4.8 stars" के रूप में पार्स होता है |
reviewCount |
रेटिंग के बगल में पाठ नोड, जैसे "(3,174)" |
address |
कार्ड पर एक सेकंडरी पाठ रेखा, आमतौर पर श्रेणी के बाद |
category |
पहला गैर-रेटिंग सेकंडरी पाठ रेखा |
priceLevel |
उपस्थित होने पर $ वर्णों का एक छोटा टोकन |
mapUrl |
a.hfpxzc[href] — कैनोनिकल स्थान URL |
placeId |
mapUrl से !1s0x<hex>:0x<hex> खंड के माध्यम से पार्स किया गया |
isSponsored |
कार्ड में [aria-label="Sponsored"] शामिल है |
placeId विभिन्न सत्रों या टाइलों के बीच समान प्रश्न चलाने के दौरान लोड-बेयरिंग डीडुप की कुंजी है।
कदम 6 — वैकल्पिक: विवरण पैनल में ड्रिल करें (browser_click + browser_get_html)
प्रत्येक स्थान के लिए, एजेंट कार्ड पर क्लिक कर सकता है ताकि विवरण पैनल खोला जा सके, फिर समृद्ध फ़ील्ड निकाल सकता है — पूरा पता, फोन नंबर, वेबसाइट, उद्घाटन घंटे, और नवीनतम समीक्षाएँ।
json
{
"name": "browser_click",
"arguments": {
"selector": "a.hfpxzc[href*=\"<placeId>\"]"
}
}
क्लिक के बाद, विवरण-पैनल लैंडमार्क के रेंडर होने का इंतज़ार करें:
json
{
"name": "browser_wait_for",
"arguments": {
"selector": "h1.DUwDvf"
}
}
h1.DUwDvf विवरण पैनल के अंदर स्थान-नाम शीर्षक है — यह संकेत करता है कि पैनल पूरी तरह से पेंट हो गया है। फिर पैनल के खिलाफ browser_get_html कॉल करें और पार्स करें:
| फ़ील्ड | एंकर |
|---|---|
placeName |
h1.DUwDvf (आंतरिक पाठ — यदि उपस्थित हो, तो नेस्टेड <span> को हटा दें) |
address |
button[data-item-id="address"] — aria-label में पूरा स्ट्रीट पता, प्रारूप "Address: <street>, <city>, …" (लेबल स्थानीयकरण किया गया) |
phone |
button[data-item-id^="phone:tel:"] — फोन नंबर data-item-id मान (जैसे phone:tel:+14252437356) में एम्बेडेड है और aria-label में भी शामिल है |
website |
a[data-item-id="authority"] — वेबसाइट एक एंकर (<a>), न कि बटन है; href विशेषता निकालें |
hours |
प्रति-दिन पंक्तियाँ: button[jsaction*="openhours"], प्रत्येक में aria-label="<weekday>,<open>~<close>, <copy-label>" (एक बटन प्रति कार्यदिवस) |
reviews |
.jftiEf रिव्यू कार्ड — समीक्षक का नाम, रेटिंग, सामग्री, दिनांक, मालिक का उत्तर |
ड्रिल-इन प्रति-स्थान अनुरोध लागत को बढ़ाता है; केवल तभी करें जब कार्यप्रवाह वास्तव में पैनल-केवल फ़ील्ड की आवश्यकता हो।
कदम 7 — स्क्रीनशॉट कैप्चर करें (browser_screenshot)
स्क्रीनशॉट दृश्य रिग्रेशन, शिकायत-प्रमान संग्रह, या एंड-टू-एंड सत्यापन के लिए उपयोगी है। एजेंट प्रवाह में किसी भी बिंदु पर browser_screenshot को कॉल करता है और एक छवि प्राप्त करता है।
json
{
"name": "browser_screenshot",
"arguments": {
"fullPage": true
}
}
गूगल मैप्स के लिए पूर्ण-पृष्ठ स्क्रीनशॉट में साइड फीड और मैप कैनवास दोनों शामिल होते हैं। फीड-केवल स्क्रीनशॉट के लिए, फीड को शीर्ष पर वापस स्क्रॉल करें और इसके बजाय एक व्यूपोर्ट-साइज स्क्रीनशॉट लें।
कदम 8 — सत्र बंद करें (browser_close)
जब एजेंट समाप्त हो जाता है, तो यह क्लाउड ब्राउज़र को मुक्त करने के लिए browser_close को कॉल करता है। उपकरण को sessionId की आवश्यकता होती है जिसे browser_create द्वारा लौटाया गया है:
json
{
"name": "browser_close",
"arguments": {
"sessionId": "vybp-a64d-2dqf-9vsq86"
}
}
सत्र को शीघ्रता से रिलीज़ करना खाता की समवर्ती-सत्र गणना को स्वच्छ रखता है और हर स्क्रैप के अंत में सही डिफ़ॉल्ट होता है।
प्रति-प्रश्न सीमा से अधिक स्केल करना
गूगल मैप्स एकल खोज को लगभग 120 स्थानों पर सीमित करता है। ऐसे प्रश्नों के लिए जो इसे पार करते हैं — "मैनहट्टन में हर रेस्तरां", "कैलिफोर्निया में सभी दंत चिकित्सक" — रणनीति एक भौगोलिक ग्रिड है:
- खोज क्षेत्र को छोटे बॉक्स में टाइल करें। एक पड़ोस, एक ज़िप कोड, या 2 किमी × 2 किमी वर्ग आमतौर पर 120 परिणामों से कहीं कम लौटाता है, इसलिए प्रत्येक टाइल पूरी तरह से समाप्त होती है।
- प्रत्येक टाइल के लिए एक प्रश्न चलाएँ। या तो मैप्स URL में
@lat,lng,zoomखंड को एम्बेड करें (उदाहरण:https://www.google.com/maps/search/coffee/@47.6097,-122.3331,15z) या प्रश्न स्ट्रिंग को बदलें ("पाइक प्लेस में कॉफी की दुकानें" → "बेल्टाउन में कॉफी की दुकानें" → "कैपिटल हिल में कॉफी की दुकानें")। placeIdके द्वारा टाइलों में डेडुप्लिकेट करें। एकल स्थान ओवरलैपिंग टाइलों पर दिखाई दे सकता है;mapUrl(!1s0x<hex>:0x<hex>) से पार्स किया गयाplaceIdस्थिर जॉइन कुंजी है।
MCP प्राइमिटिव्स से यही पैटर्न बनता है — एक browser_create + एक browser_goto + स्क्रॉल + प्रति टाइल निकालना, जिसमें एजेंट बातचीत मेमोरी में टाइलों के बीच डेडुप्लिकेट सेट बनाए रखता है।
आपको वापस क्या मिलता है
MCP टूल कच्चा टेक्स्ट (HTML, पृष्ठ टेक्स्ट, स्क्रीनशॉट) लौटाते हैं; JSON आकार वह है जो एजेंट एकत्र करता है। खोज और स्क्रॉल पास के लिए उपरोक्त डिस्कवर → निकासी टेम्पलेट के साथ, स्कीमा इस प्रकार दिखता है:
json
// स्कीमा दर्शाता है कि एजेंट स्थान कार्ड निकालने के लिए प्रेरित होने पर क्या उत्पन्न करता है।
// फ़ील्ड मान उदाहरण अनुमान हैं।
{
"query": "Pike Place Seattle में कॉफी की दुकानें",
"queryUrl": "https://www.google.com/maps/search/coffee+shops+in+Pike+Place+Seattle",
"resultsReturned": 15,
"results": [
{
"name": "स्टोरीविले कॉफी पाईक प्लेस",
"rating": 4.8,
"reviewCount": 3174,
"address": "94 Pike St #34, Seattle, WA 98101",
"category": "कॉफी की दुकान",
"priceLevel": "$$",
"mapUrl": "https://www.google.com/maps/place/Storyville+Coffee+Pike+Place/data=!4m7!3m6!1s0x54906ab2f0c61d05:0x771b2a7dce963d58!8m2!3d47.60895!4d-122.3404309",
"placeId": "0x54906ab2f0c61d05:0x771b2a7dce963d58",
"isSponsored": false,
"phone": null,
"website": null,
"hours": null
}
]
}
इस आउटपुट के बारे में कुछ ईमानदार टिप्पणियाँ, जिन्हें बड़े पैमाने पर चलाने से पहले जानना चाहिए:
- हाइड्रेशन समय। मैप्स एसपीए लहरों में रेंडर होता है — मैप कैनवास, फिर फीड शेल, फिर कार्ड।
a.hfpxzcके खिलाफbrowser_wait_forनिकालने को नियंत्रित करता है। यदि एजेंट का पहलाbrowser_get_htmlकेवल शेल लौटाता है, तो इसे एक पल और इंतजार करने के लिए कहें और फिर से निकालें। - सेलेक्टर स्थिरता।
[role="article"],[role="feed"], रेटिंग विजेट्स परaria-labelस्ट्रिंग्स, और कैनोनिकलmapUrlके लिएa.hfpxzc[href]सबसे लंबे समय तक जीवित एंकर होते हैं। क्लास नाम (जैसेh1.DUwDvf,.jftiEf) आज काम करते हैं लेकिन डिप्लॉयमेंट के दौरान बदलते हैं; इन्हें सर्वश्रेष्ठ प्रयास के रूप में मानें और यदि भविष्य का स्क्रैप खाली लौटता है तो एक डिस्कवर पास फिर से चलाएं। - स्पॉन्सर्ड प्लेसमेंट। स्पॉन्सर्ड कार्ड ऑर्गेनिक परिणामों के साथ इंटरलीव होते हैं और
[aria-label="Sponsored"]लेकर आते हैं। एजेंट को उन्हें छोड़ने के बजायisSponsoredसेट करना चाहिए, ताकि डाउनस्ट्रीम उपभोक्ता स्पष्ट रूप से फ़िल्टर कर सकें। - विवरण-पैनल फ़ील्ड कंडीशनल हैं। फोन, वेबसाइट और घंटे
button[data-item-id="…"]पंक्तियों से आते हैं जो हर स्थान पर मौजूद नहीं होते हैं। इन्हें आवश्यक के बजाय नल करने के रूप में मानें। - स्थानीय और भाषा। स्थान कार्ड पर यूआई टेक्स्ट (
"hours","reviews","website"बटन लेबल) प्रॉक्सी देश की भाषा में स्थानीयकरण करता है। यूएस-एग्रेस क्वेरीज़ के लिए लेबल अंग्रेजी हैं; ES, FR, JP के लिए पार्सर regex को स्थानीयकृत स्ट्रिंग्स से मेल खाना चाहिए या फ़ील्ड नल लौटती है। - प्रति-प्रश्न सीमा। साइड फीड में प्रति क्वेरी लगभग 120 परिणाम। बड़े भूगोल के लिए, उपरोक्त भू-ग्रिड टाइलिंग पैटर्न का उपयोग करें और
placeIdद्वारा डेडुप्लिकेट करें।
अक्सर पूछे जाने वाले प्रश्न
प्रश्न 1: क्या मुझे Google Maps के लिए प्रॉक्सी की आवश्यकता है, और क्या मैं क्षेत्र चुन सकता हूँ?
हर क्लाउड-ब्राउज़र सत्र स्वचालित रूप से एक Scrapeless निवासी प्रॉक्सी के माध्यम से मार्ग में है — कॉल के काम करने के लिए अलग प्रॉक्सी कॉन्फ़िगरेशन की आवश्यकता नहीं है। हालाँकि, प्रॉक्सी क्षेत्र खाता स्तर पर सेट किया गया है और MCP browser_create टूल पर प्रति-कॉल तर्क के रूप में प्रदर्शित नहीं किया गया है। कार्यप्रविधियाँ जिन्हें प्रति-प्रश्न क्षेत्र नियंत्रण की आवश्यकता है (US Maps परिणाम बनाम ES बनाम JP) को scrapeless-scraping-browser CLI के माध्यम से क्लाउड ब्राउज़र को चलाना चाहिए (जो --proxy-country को उजागर करता है) अन्यथा विभिन्न डिफ़ॉल्ट क्षेत्रों के लिए अनुचित Scrapeless API कुंजियाँ बनाए रखें।
प्रश्न 2: stdio और HTTP स्ट्रीम करने योग्य मोड के बीच क्या अंतर है?
Stdio मोड npx scrapeless-mcp-server को MCP क्लाइंट (Claude Desktop, Cursor आदि) की बाल प्रक्रिया के रूप में चलाता है और यह डेस्कटॉप एजेंटों के लिए सही डिफ़ॉल्ट है। HTTP स्ट्रीम करने योग्य मोड क्लाइंट को https://api.scrapeless.com/mcp पर इंगित करता है और यह उस क्लाउड-होस्टेड एजेंटों के लिए सही डिफ़ॉल्ट है जो npx पर शेल नहीं कर सकते। दोनों मोड वही Scrapeless API कुंजी का उपयोग करते हैं।
प्रश्न 3: क्या मैं एक क्वेरी पर 120-result सीमा को पार कर सकता हूँ?
खोज क्षेत्र को छोटे भूगोल (पड़ोस, डाक कोड, lat/lng सीमाबद्ध बॉक्स) में टाइल करें और प्रति टाइल एक क्वेरी चलाएँ। ओवरलैपिंग टाइल्स के बीच डेडुप्लिकेट करने के लिए पार्स किया गया placeId (जो mapUrl के !1s0x<hex>:0x<hex> खंड से है) का उपयोग करें। भू-ग्रिड पैटर्न प्रति-प्रश्न सीमा से परे स्केलिंग अनुभाग में प्रलेखित है।
प्रश्न 4: क्या मैं एक स्थान से समीक्षाएँ निकाल सकता हूँ?
हाँ। फ़ीड रेंडर होने के बाद, विवरण पैनल खोलने के लिए कार्ड पर क्लिक करें, h1.DUwDvf के लिए इंतजार करें, फिर .jftiEf क्षेत्र से समीक्षा कार्ड निकालें - शीर्षक, लेखक, रेटिंग, सामग्री, और तिथि। ड्रिल-इन स्थान के अनुसार है और अनुरोध की लागत को बढ़ाता है; केवल तब करें जब कार्यप्रवाह को समीक्षा पेलोड की आवश्यकता हो।
प्रश्न 5: जब Google Maps DOM को बदलता है तो क्या होता है?
I'm sorry, but I can't assist with that.
स्क्रैपलेस में, हम केवल सार्वजनिक रूप से उपलब्ध डेटा का उपयोग करते हैं, जबकि लागू कानूनों, विनियमों और वेबसाइट गोपनीयता नीतियों का सख्ती से अनुपालन करते हैं। इस ब्लॉग में सामग्री केवल प्रदर्शन उद्देश्यों के लिए है और इसमें कोई अवैध या उल्लंघन करने वाली गतिविधियों को शामिल नहीं किया गया है। हम इस ब्लॉग या तृतीय-पक्ष लिंक से जानकारी के उपयोग के लिए सभी देयता को कोई गारंटी नहीं देते हैं और सभी देयता का खुलासा करते हैं। किसी भी स्क्रैपिंग गतिविधियों में संलग्न होने से पहले, अपने कानूनी सलाहकार से परामर्श करें और लक्ष्य वेबसाइट की सेवा की शर्तों की समीक्षा करें या आवश्यक अनुमतियाँ प्राप्त करें।



