Rust में HTML पार्सिंग: लाइब्रेरीज़ का अवलोकन और व्यावहारिक उदाहरण
Rust — एक सिस्टम प्रोग्रामिंग भाषा है, जो अपने प्रदर्शन, मेमोरी सुरक्षा और सख्त टाइपिंग के कारण वेब-स्क्रैपिंग और HTML पार्सिंग के कार्यों में लोकप्रियता प्राप्त कर रही है। इस लेख में हम Rust में HTML पार्सिंग के लिए मुख्य लाइब्रेरीज़, उनकी क्षमताओं पर विचार करेंगे और प्रत्येक के लिए कोड उदाहरण प्रस्तुत करेंगे।
1. scraper लाइब्रेरी
scraper — Rust में HTML पार्सिंग के लिए सबसे लोकप्रिय और सुविधाजनक लाइब्रेरीज़ में से एक है। यह html5ever (HTML5 पार्सर) पर आधारित है और CSS-सेलेक्टरों का उपयोग करके DOM-ट्री में नेविगेशन के लिए एक उच्च-स्तरीय API प्रदान करती है।
स्थापना
[dependencies]scraper = "0.19"उदाहरण: लेखों के शीर्षक प्राप्त करना
use scraper::{Html, Selector};
fn main() { let html = r#" <html> <body> <h1 class="title">पहला लेख</h1> <h1 class="title">दूसरा लेख</h1> </body> </html> "#;
let document = Html::parse_document(html); let selector = Selector::parse("h1.title").unwrap();
for element in document.select(&selector) { println!("{}", element.text().collect::<Vec<_>>().join(" ")); }}लाभ:
- CSS-सेलेक्टरों के लिए सहज API
- सभी मानक स्यूडोक्लास और कॉम्बिनेटरों का समर्थन
- उच्च प्रदर्शन
- अच्छा दस्तावेज़ीकरण
2. select.rs लाइब्रेरी
select.rs — html5ever पर आधारित HTML पार्सिंग के लिए एक और शक्तिशाली लाइब्रेरी है। यह jQuery जैसा API प्रदान करती है, जो JavaScript से परिचित डेवलपर्स के लिए विशेष रूप से सुविधाजनक है।
स्थापना
[dependencies]select = "0.6"उदाहरण: लिंक निकालना
use select::document::Document;use select::predicate::{Name, Class};
fn main() { let html = r#" <html> <body> <a href="https://example.com" class="link">उदाहरण</a> <a href="https://rust-lang.org" class="link">Rust</a> </body> </html> "#;
let document = Document::from(html);
for node in document.find(Class("link")) { if let Some(href) = node.attr("href") { println!("लिंक: {}", href); } }}लाभ:
- jQuery जैसा सिंटैक्स
- तत्वों की खोज के लिए लचीले प्रेडिकेट
- विशेषताओं और टेक्स्ट सामग्री का समर्थन
3. html5ever लाइब्रेरी
html5ever — Rust में लिखा गया एक निम्न-स्तरीय HTML5 पार्सर है। यह कई अन्य लाइब्रेरीज़ (जिनमें scraper और select.rs शामिल हैं) का आधार है। यदि आपको पार्सिंग प्रक्रिया पर पूर्ण नियंत्रण चाहिए, तो यह एक उत्कृष्ट विकल्प है।
स्थापना
[dependencies]html5ever = "0.27"उदाहरण: HTML टोकनाइज़ेशन
use html5ever::tendril::TendrilSink;use html5ever::parse_document;use html5ever::rcdom::{RcDom, Handle, NodeData};
fn main() { let html = "<p>नमस्ते, Rust!</p>"; let dom = parse_document(RcDom::default(), Default::default()) .from_utf8() .read_from(&mut html.as_bytes()) .unwrap();
// DOM-ट्री का भ्रमण fn walk(node: &Handle, depth: usize) { match node.data { NodeData::Text { ref contents } => { let text = contents.borrow(); println!("{:indent$}टेक्स्ट: {}", "", text, indent = depth * 2); } NodeData::Element { ref name,