क्या आप रूबी के साथ HTML पार्स करने की कोशिश कर रहे हैं?
यह कार्य थोड़ा मुश्किल हो सकता है यदि आपके पास सही उपकरण नहीं हैं।
लेकिन आज आप भाग्यशाली हैं!
क्योंकि रूबी के पास नोकोगिरी नामक यह अद्भुत लाइब्रेरी है, जो HTML पार्सिंग को पार्क में टहलने जैसा आसान बना देती है।
आइए कुछ उदाहरण देखते हैं।
सबसे पहले, नोकोगिरी जेम इंस्टॉल करें:
gem install nokogiri
यदि आपको जेम इंस्टॉल करने में समस्या है तो इसे आजमाएं:
gem install nokogiri -- --use-system-libraries
शीर्षक कैसे निकालें
फिर निम्न स्क्रिप्ट बनाएं, जिसमें एक बेसिक HTML स्निपेट है जिसे नोकोगिरी द्वारा पार्स किया जाएगा।
पेज शीर्षक प्राप्त करने के लिए इस कोड को चलाएं:
require 'nokogiri' html = "test actual content here..." parsed_data = Nokogiri::HTML.parse(html) puts parsed_data.title => "test"
यदि आप HTML स्ट्रिंग के बजाय सीधे URL से डेटा पार्स करना चाहते हैं...
आप यह कर सकते हैं:
require 'open-uri' Nokogiri::HTML.parse(open('https://example.com')).title
यह HTML डाउनलोड करेगा और आपको शीर्षक देगा।
अब:
शीर्षक प्राप्त करना अच्छा है, लेकिन आप शायद अधिक उन्नत उदाहरण देखना चाहते हैं।
सही?
आइए देखते हैं कि वेबसाइट से लिंक्स कैसे निकाले जाते हैं।
एंकर लिंक्स निकालना
यदि आप किसी पेज से सभी लिंक्स चाहते हैं तो पहले आपको HTML की आवश्यकता होगी।
आप किसी भी सार्वजनिक वेबसाइट के लिए HTML डाउनलोड करने के लिए उसी open-uri तकनीक का उपयोग कर सकते हैं।
फिर नोकोगिरी के साथ इसे पार्स करके एक डॉक्यूमेंट ऑब्जेक्ट प्राप्त करें।
इस तरह:
document = Nokogiri::HTML.parse(open('https://example.com')) document.class # Nokogiri::HTML::Document
आप इस ऑब्जेक्ट से दो तरीकों से जानकारी क्वेरी कर सकते हैं:
- XPath क्वेरीज़ का उपयोग करके
- CSS सेलेक्टर्स का उपयोग करके
आइए पहले XPath का उपयोग करके देखते हैं कि यह कैसे करना है।
यहां कोड है:
tags = document.xpath("//a")
यह क्या करता है?
यह पेज में सभी HTML टैग्स के माध्यम से फ़िल्टर करता है, और आपको वे देता है जिनका आप अनुरोध कर रहे हैं।
इस मामले में "a" टैग्स।
जो HTML में लिंक्स वाले टैग्स हैं।
अब:
आपके पास इन टैग्स को दर्शाने वाले Nokogiri::XML::Element की एक सरणी है।
यदि आप लिंक URL और टेक्स्ट प्राप्त करना चाहते हैं तो आप यह कर सकते हैं:
tags.each do |tag| puts "#{tag[:href]}\t#{tag.text}" end
यह सभी लिंक्स को आपकी स्क्रीन पर एक प्रति लाइन प्रिंट करेगा।
यदि आप लिंक्स के बजाय कुछ अन्य जानकारी स्क्रैप करना चाहते हैं, जैसे पेज पर उपलब्ध इमेजेज की सूची, तो आप उसी प्रक्रिया का पालन कर सकते हैं।
केवल एक चीज जिसे आपको बदलने की आवश्यकता है वह है उस टैग का प्रकार जिसे आप चाहते हैं।
उदाहरण के लिए:
tags = document.xpath("//img") images_urls = tags.map { |t| t[:src] }
जहां img इमेजेज के लिए HTML टैग है, और src वह एट्रिब्यूट है जहां इमेज URL संग्रहीत है।
सही CSS सेलेक्टर और एट्रिब्यूट्स खोजने के लिए अपने ब्राउज़र के डेवलपर टूल्स का उपयोग करें।
नोकोगिरी के साथ CSS सेलेक्टर्स का उपयोग
आप xpath विधि को css विधि से बदलकर CSS सेलेक्टर्स का उपयोग कर सकते हैं।
यहां एक उदाहरण है:
headers = document.css("h1") paragraphs = document.css("p")
नोट:
at_cssऔरcssके बीच अंतर यह है कि पहला केवल पहला मिलान तत्व लौटाता है, लेकिन बाद वाला सभी मिलान तत्वों को लौटाता है।
CSS का उपयोग करके आपको वही परिणाम मिलते हैं, पूरा बिंदु नोकोगिरी को यह बताना है कि आप किन HTML तत्वों के साथ काम करना चाहते हैं।
अधिकांश डेवलपर्स XPath की तुलना में CSS से अधिक परिचित हैं, इसलिए आप CSS का उपयोग करना चाहेंगे।
सारांश
आप नोकोगिरी डॉक्यूमेंटेशन यहां पा सकते हैं:
https://www.rubydoc.info/github/sparklemotion/nokogiri
आपको यह भी पसंद आ सकता है:
रूबी स्ट्रिंग फॉर्मेट