Ruby के साथ प्लेयराइट: एक व्यावहारिक वेब स्क्रैपिंग ट्यूटोरियल
Lead Scraping Automation Engineer
TL;DR:
- रूबी
playwright-ruby-clientके माध्यम से प्ले राइट को नियंत्रित कर सकती है। जेम द्वारा रिपोर्ट की गई सटीक संगतplaywright-coreसंस्करण स्थापित करें। - डायनैमिक पेज के लिए लोकेटर और स्पष्ट प्रतीक्षा का उपयोग करें। ट्यूटोरियल दो जावास्क्रिप्ट-निर्मित पृष्ठ निकालता है और संरचित रिकॉर्ड वापस करता है।
- हर पंक्ति में पूर्वज जोड़ें। स्रोत URL को पाठ और लेखक के साथ संग्रहीत करें ताकि पृष्ठांकन त्रुटियाँ ट्रेस करने योग्य बनी रहें।
- ब्राउज़र और बाउंड पृष्ठांकन बंद करें। एक स्क्रैपर्स एक अनुसूचित नौकरी बनने से पहले संसाधन सीमाएँ और स्टॉप शर्तें महत्वपूर्ण हैं।
- स्थानीय प्ले राइट के पास एक संचालन सीमा है। Scrapeless Scraping Browser एक प्रबंधित CDP एंडपॉइंट प्रदान कर सकता है जबकि रूबी निष्कर्षण लॉजिक को बनाए रखता है।
प्ले राइट एक आधिकारिक रूबी बाइंडिंग प्रकाशित नहीं करता है, लेकिन सामुदायिक-निर्मित playwright-ruby-client प्ले राइट प्रोटोकॉल के लिए एक व्यावहारिक क्लाइंट प्रदान करता है। यह रूबी अनुप्रयोगों के लिए अच्छी तरह से काम करता है जिन्हें जावास्क्रिप्ट रेंडरिंग, विश्वसनीय लोकेटर, और ब्राउज़र नेविगेशन की आवश्यकता होती है बिना पूरे प्रोजेक्ट को Node.js में स्थानांतरित किए।
यह ट्यूटोरियल संगत संस्करण स्थापित करता है, एक सार्वजनिक जावास्क्रिप्ट डेमो से दो पृष्ठ स्क्रैप करता है, संरचित डेटा निर्यात करता है, और समझाता है कि जब स्थानीय ब्राउज़र संचालन बाधा बन जाते हैं तो ब्राउज़र प्रक्रिया को Scrapeless में कैसे स्थानांतरित करें।
Prerequisites
आपको रूबी, बंडलर, Node.js, और एक स्थापित Chromium-आधारित ब्राउज़र की आवश्यकता है। सत्यापित चलने में रूबी 2.6.10, playwright-ruby-client 1.62.0, playwright-core 1.62.1, और गूगल क्रोम का उपयोग किया गया था।
सटीक प्ले राइट कोर संस्करण महत्वपूर्ण है। playwright-ruby-client रिपॉजिटरी उपयोगकर्ताओं को इसके संगत प्रोटोकॉल संस्करण के लिए जेम का क्वेरी करने के लिए निर्देशित करता है बजाए एक मनमाना नवीनतम पैकेज स्थापित करने के।
Install Playwright for Ruby
एक प्रोजेक्ट बनाएं और जेम जोड़ें:
ruby
# Gemfile
source 'https://rubygems.org'
gem 'playwright-ruby-client'
इसे स्थापित करें, संगत प्ले राइट संस्करण प्रिंट करें, और उस सटीक नोड पैकेज को स्थापित करें:
bash
bundle install
PLAYWRIGHT_CLI_VERSION=$(bundle exec ruby -e 'require "playwright/version"; puts Playwright::COMPATIBLE_PLAYWRIGHT_VERSION')
npm install "playwright-core@$PLAYWRIGHT_CLI_VERSION"
यदि कोई स्थानीय ब्राउज़र उपलब्ध नहीं है, तो ./node_modules/.bin/playwright-core install chromium संगत क्रोमियम निर्माण को डाउनलोड करता है। उदाहरण नीचे के बजाय एक मौजूदा क्रोम निष्पादन फ़ाइल की ओर इंगित करता है।
सामुदायिक क्लाइंट की दस्तावेज़ीकरण साइट समर्थित ब्राउज़र API को कवर करती है। सार्वजनिक जावास्क्रिप्ट उद्धरण डेमो यहाँ प्रयुक्त लक्ष्य है।
Scrape a Dynamic Page With Ruby
scrape_quotes.rb बनाएं:
ruby
require 'json'
require 'playwright'
chrome = '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'
cli = './node_modules/.bin/playwright-core'
rows = []
Playwright.create(playwright_cli_executable_path: cli) do |playwright|
playwright.chromium.launch(headless: true, executablePath: chrome) do |browser|
page = browser.new_page
page.goto('https://quotes.toscrape.com/js/page/1/', waitUntil: 'domcontentloaded')
2.times do
page.locator('.quote').first.wait_for
page.locator('.quote').all.each do |quote|
rows << {
text: quote.locator('.text').text_content,
author: quote.locator('.author').text_content,
source_url: page.url
}
end
next_link = page.locator('li.next a')
break if next_link.count.zero?
next_link.click
page.locator('.quote').first.wait_for
end
end
end
puts JSON.pretty_generate({ count: rows.length, first: rows.first, last: rows.last })
इसे चलाएं:
bash
bundle exec ruby scrape_quotes.rb
सत्यापित चलने में 20 रिकॉर्ड लौटाए गए: पहला रिकॉर्ड पृष्ठ 1 से आया और अंतिम पृष्ठ 2 से। यह इस नमूने पर प्रस्तुत चयनकर्ता, पृष्ठांकन क्लिक, प्रतीक्षा, और संरचित आउटपुट पथ को साबित करता है। यह एक थ्रूपुट बेंचमार्क नहीं है।
Why the Script Uses Locators and Waits
डायनैमिक पेज पर प्रारंभिक HTML में रिकॉर्ड नहीं हो सकते हैं। page.goto दस्तावेज़ घटना की प्रतीक्षा करता है, जबकि locator('.quote').first.wait_for स्क्रैपर्स द्वारा आवश्यक व्यावसायिक तत्व की प्रतीक्षा करता है।
यह अंतर निश्चित नींदों से बचाता है। एक दो सेकंड का विलंब एक रन पर आवश्यकतानुसार लंबा हो सकता है और दूसरे पर बहुत छोटा। एक लोकेटर प्रतीक्षा वास्तविक स्वीकृति की स्थिति को व्यक्त करती है।
लोकेटर क्वेरियों को संयोजित करने योग्य भी रखते हैं। स्क्रिप्ट प्रत्येक .quote को खोजती है, फिर उस पंक्ति के भीतर .text और .author को सीमित करती है। यह एक कार्ड के लेखक को दूसरे से पाठ के साथ युग्मित होने से रोकता है।
Add Safe Pagination and Structured Output
हर पृष्ठांकन लूप को एक स्टॉप स्थिति की आवश्यकता होती है। यह ट्यूटोरियल 2.times का उपयोग करता है, फिर समाप्त होता है यदि अगला लिंक मौजूद नहीं है। एक उत्पादन नौकरी एक पृष्ठ सीमा को एक देखे गए-URL सेट और एक रिकॉर्ड ड्यूप्लिकेशन कुंजी के साथ मिला सकती है।
source_url को हर रिकॉर्ड के साथ रखें। जब एक चयनकर्ता बदलता है या एक डुप्लिकेट प्रकट होता है, तो पूर्वज यह संभव बनाता है कि पृष्ठ को फिर से बनाया जा सके और पार्सर त्रुटियों को स्रोत परिवर्तनों से अलग किया जा सके।
फाइल उत्पादन के लिए, अंतिम puts को File.write('quotes.json', JSON.pretty_generate(rows)) के साथ बदलें। एक अस्थायी फ़ाइल में लिखें और केवल यदि डाउनस्ट्रीम पाठक आउटपुट को समवर्ती रूप से उपभोग कर सकते हैं तो उसे मान्यता के बाद नाम बदलें।
Control Browser Resources
launch के ब्लॉक रूप में ब्राउज़र को बंद कर देता है जब ब्लॉक समाप्त होता है, ज्यादातर अपवादों सहित। अनुसूचित नौकरियों को भी यह सीमित करना चाहिए:
- अधिकतम पृष्ठ और नेविगेशन गहराई;
- समवर्ती ब्राउज़र संदर्भ;
- नेविगेशन और लोकेटर टाइमआउट;
- स्क्रीनशॉट और ट्रेस बनाए रखना;
- स्वीकार्य प्रतिक्रिया प्रकार और अधिकतम पेलोड आकार।
एक पृष्ठ जो स्थिति 200 लौटाता है, फिर भी गलत प्रतिनिधित्व हो सकता है। रिकॉर्ड सहेजने से पहले अंतिम URL, पृष्ठ शीर्षक, आवश्यक चयनकर्ता, और कम से कम एक व्यावसायिक पहचानकर्ता की पुष्टि करें। HTTP अर्थशास्त्र विनिर्देश प्रतिक्रिया स्थिति को समझाता है, लेकिन अनुप्रयोग-स्तरीय पहचान हमेशा स्क्रैपर की जिम्मेदारी बनी रहती है।
Where Local Playwright Stops
स्थानीय प्लेयराइट विकास के दौरान कोड को सरल बनाए रखता है। उत्पादन में, टीम संगत ब्राउज़र बाइनरीज, ओएस निर्भरताएँ, प्रक्रिया सफाई, मेमोरी आवंटन, भौगोलिक रूटिंग, सत्र अलगाव और डायग्नोस्टिक्स को भी बनाए रखती है।
रूबी क्लाइंट को एक प्लेयराइट सर्वर या सीएलआई की आवश्यकता होती है जो संगत प्रोटोकॉल बोलता है। इसके मिलान playwright-core संस्करण के बिना जेम को अपग्रेड करने से वह सीमा टूट सकती है। दोनों पैकेजों को पिन करें और उन्हें एक साथ अपडेट करें।
स्क्रेपलेस स्क्रेपिंग ब्राउज़र ब्राउज़र प्रक्रिया को एक प्रबंधित सेवा में स्थानांतरित करता है। स्क्रेपलेस अपने एसडीके और एक सीडीपी कनेक्शन यूआरएल को प्लेयराइट इंटीग्रेशन गाइड में दस्तावेज़ करता है।
रूबी को स्क्रेपलेस ब्राउज़र सत्र से कनेक्ट करें
पूर्वापेक्षा: एक सक्रिय क्लाउड कनेक्शन के लिए एक रीडर-स्वामित्व वाला स्क्रेपलेस एपीआई कुंजी की आवश्यकता होती है। स्थानीय रूबी स्क्रेपिंग स्क्रिप्ट सफलतापूर्वक चलाई गई; इस वातावरण में क्लाउड हैंडशेक निष्पादित नहीं किया गया क्योंकि कोई SCRAPELESS_API_KEY उपलब्ध नहीं था।
दस्तावेज़ की गई वास्तुकला के दो पक्ष हैं:
- स्क्रेपलेस एसडीके या दस्तावेज़ित ब्राउज़र अंतिम बिंदु के साथ एक प्रबंधित स्क्रेपलेस ब्राउज़र सत्र बनाना;
- रूबी को परिणामी वेब्सॉकेट अंतिम बिंदु देना और क्लाइंट-समर्थित दूरस्थ ब्राउज़र विधि के माध्यम से कनेक्ट करना।
रूबी क्लाइंट Playwright.connect_to_browser_server के लिए एक प्लेयराइट सर्वर वेब्सॉकेट को दस्तावेज़ करता है। स्क्रेपलेस एक सीडीपी अंतिम बिंदु को उजागर करता है, इसलिए इसे सीधे वायर्ड करने से पहले वर्तमान रूबी क्लाइंट की सीडीपी संगतता की पुष्टि करें। जब सीधे संगतता असुरक्षित होती है, तो एक छोटे नोड कनेक्शन सेवा को ब्राउज़र सीमा पर रखें और संरचित पृष्ठ परिणामों को रूबी में भेजें। एक वेब्सॉकेट प्रोटोकॉल को दूसरे के लिए चुपचाप प्रतिस्थापित न करें।
वह स्पष्ट सीमा बिना परीक्षण वाले कनेक्शन स्निपेट को प्रकाशित करने से अधिक सुरक्षित है। यह सत्यापित रूबी निष्कर्षण तर्क को संरक्षित करता है जबकि सत्र निर्माण और प्रोटोकॉल अनुकूलन को एक घटक में छोड़ता है जिसे एक वास्तविक खाते के साथ एकीकरण-परीक्षण किया जा सकता है।
निष्कर्ष
रूबी के साथ प्लेयराइट व्यावहारिक है जब जेम और playwright-core संस्करण ठीक से जोड़े जाते हैं। स्थानानक, व्यवसाय-तत्व प्रतीक्षा, सीमाबद्ध पृष्ठांकन, मूल, और ब्राउज़र सफाई एक डेमो को एक विश्वसनीय प्रारंभिक बिंदु में बदलते हैं।
विकास के दौरान स्थानीय क्रोम का उपयोग करें। जब स्थापना, स्केलिंग, रूटिंग, और डायग्नोस्टिक्स एक पुनरावर्ती परिचालन बोझ बन जाते हैं, तो स्क्रेपलेस में ब्राउज़र प्रक्रिया को स्थानांतरित करें और तैनाती से पहले एक वास्तविक क्रेडेंशियल के साथ दूरस्थ प्रोटोकॉल सीमा का परीक्षण करें।
ब्राउज़र सीमा एक बार बनाएं
प्लेयराइट स्टील्थ गाइड पढ़ें, वर्तमान मूल्य निर्धारण की तुलना करें, फिर एक स्क्रेपलेस खाता बनाएं और अपने एपीआई कुंजी के साथ एक प्रबंधित सत्र की पुष्टि करें।
सामान्य प्रश्न
प्रश्न: क्या प्लेयराइट आधिकारिक रूप से रूबी का समर्थन करता है?
माइक्रोसॉफ्ट प्लेयराइट एक आधिकारिक रूबी बाइंडिंग प्रकाशित नहीं करता है; playwright-ruby-client एक सामुदायिक- बनाए रखने वाला क्लाइंट है।
प्रश्न: रूबी को किस प्लेयराइट संस्करण का उपयोग करना चाहिए?
स्थापित जेम से Playwright::COMPATIBLE_PLAYWRIGHT_VERSION क्वेरी करें और उस सटीक playwright-core संस्करण को इंस्टॉल करें।
प्रश्न: मैं रूबी प्लेयराइट में जावास्क्रिप्ट सामग्री की प्रतीक्षा कैसे करूं?
एक लोकेटर का इंतज़ार करें जो आवश्यक व्यावसायिक सामग्री का प्रतिनिधित्व करता है, इसके बजाय कि किसी निश्चित नींद पर भरोसा करें।
प्रश्न: पृष्ठांकन को कैसे सीमाबद्ध किया जाना चाहिए?
एक अधिकतम पृष्ठ गणना का उपयोग करें, जब अगला लिंक गायब हो जाए तो रोकें, और देखे गए यूआरएल को ट्रैक करें या रिकॉर्ड कुंजी।
प्रश्न: क्या रूबी सीधे स्क्रेपलेस स्क्रेपिंग ब्राउज़र से कनेक्ट हो सकता है?
स्क्रेपलेस एक सीडीपी अंतिम बिंदु को उजागर करता है, जबकि रूबी सामुदायिक क्लाइंट एक प्लेयराइट-सर्वर कनेक्शन को दस्तावेजित करता है; वास्तविक खाते के साथ प्रोटोकॉल संगतता की पुष्टि करें या एक छोटे परीक्षण किए गए नोड सीमा का उपयोग करें।
स्क्रैपलेस में, हम केवल सार्वजनिक रूप से उपलब्ध डेटा का उपयोग करते हैं, जबकि लागू कानूनों, विनियमों और वेबसाइट गोपनीयता नीतियों का सख्ती से अनुपालन करते हैं। इस ब्लॉग में सामग्री केवल प्रदर्शन उद्देश्यों के लिए है और इसमें कोई अवैध या उल्लंघन करने वाली गतिविधियों को शामिल नहीं किया गया है। हम इस ब्लॉग या तृतीय-पक्ष लिंक से जानकारी के उपयोग के लिए सभी देयता को कोई गारंटी नहीं देते हैं और सभी देयता का खुलासा करते हैं। किसी भी स्क्रैपिंग गतिविधियों में संलग्न होने से पहले, अपने कानूनी सलाहकार से परामर्श करें और लक्ष्य वेबसाइट की सेवा की शर्तों की समीक्षा करें या आवश्यक अनुमतियाँ प्राप्त करें।



