क्या आप रूबी के साथ 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 की आवश्यकता होगी।
आप उसी open-uri
का उपयोग कर सकते हैं किसी भी सार्वजनिक वेबसाइट के लिए HTML डाउनलोड करने की तकनीक।
फिर दस्तावेज़ ऑब्जेक्ट प्राप्त करने के लिए इसे नोकोगिरी के साथ पार्स करें।
इसे पसंद करें :
document = Nokogiri::HTML.parse(open('https://example.com')) document.class # Nokogiri::HTML::Document
जानकारी के लिए आप इस ऑब्जेक्ट को दो तरीकों में से एक में क्वेरी कर सकते हैं:
- XPath क्वेरी का उपयोग करना
- सीएसएस चयनकर्ताओं का उपयोग करना
आइए देखें कि पहले XPath का उपयोग करके इसे कैसे करें।
यह रहा कोड :
tags = document.xpath("//a")
वह क्या करता है?
यह पृष्ठ के सभी HTML टैग के माध्यम से फ़िल्टर करता है , और आपको वह देता है जिसका आप अनुरोध कर रहे हैं।
इस मामले में "ए" टैग।
वे कौन से टैग हैं जिनमें 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
आपको यह भी पसंद आ सकता है:
रूबी स्ट्रिंग प्रारूप