Rust में HTML पार्सिंग: लाइब्रेरी और व्यावहारिक उदाहरण

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Rust में HTML पार्सिंग: सर्वश्रेष्ठ लाइब्रेरी और कोड उदाहरण

Rust एक सिस्टम प्रोग्रामिंग भाषा है जिसका उपयोग HTML पार्सिंग जैसे कार्यों के लिए तेजी से बढ़ रहा है। उच्च प्रदर्शन, सख्त टाइपिंग और मेमोरी सुरक्षा के कारण, Rust तेज़ और विश्वसनीय वेब पेज पार्सर बनाने के लिए बहुत उपयुक्त है। इस लेख में, हम Rust में HTML पार्सिंग के लिए मुख्य लाइब्रेरी, उनकी क्षमताओं और व्यावहारिक कोड उदाहरणों पर चर्चा करेंगे।

Rust में HTML पार्सिंग क्यों?

HTML पार्सिंग एक ऐसा कार्य है जिसमें मेमोरी का कुशल उपयोग और त्रुटियों की सख्त हैंडलिंग आवश्यक है। Rust प्रदान करता है:

  • शून्य-लागत एब्स्ट्रैक्शन — उच्च निष्पादन गति
  • गार्बेज कलेक्टर के बिना सुरक्षित मेमोरी प्रबंधन
  • शक्तिशाली टाइप सिस्टम, जो कंपाइलेशन के समय त्रुटियों को रोकता है
  • सक्रिय समुदाय और वेब स्क्रैपिंग के लिए कई लाइब्रेरी

Rust में HTML पार्सिंग के लिए मुख्य लाइब्रेरी

1. scraper — सबसे लोकप्रिय लाइब्रेरी

scraper लाइब्रेरी CSS-सेलेक्टर का उपयोग करके DOM ट्री में नेविगेट करने के लिए एक सुविधाजनक API प्रदान करती है। यह html5ever पार्सर पर आधारित है, जो HTML5 मानकों का पालन करता है।

इंस्टॉलेशन:

[dependencies]
scraper = "0.18"

उदाहरण: पेज से सभी लिंक निकालना

use scraper::{Html, Selector};

fn main() {
    let html = r#"
        <html>
            <body>
                <a href="https://example.com">Example</a>
                <a href="https://rust-lang.org">Rust</a>
            </body>
        </html>
    "#;

    let document = Html::parse_document(html);
    let selector = Selector::parse("a").unwrap();

    for element in document.select(&selector) {
        if let Some(href) = element.value().attr("href") {
            println!("लिंक: {}", href);
        }
    }
}

2. select.rs — हल्का और तेज़ सेलेक्टर

select.rs लाइब्रेरी CSS-सेलेक्टर के साथ काम करने के लिए एक न्यूनतम इंटरफ़ेस प्रदान करती है। यह भी आंतरिक रूप से html5ever का उपयोग करती है, लेकिन DOM तक निचले स्तर की पहुँच देती है।

इंस्टॉलेशन:

[dependencies]
select = "0.6"

उदाहरण: सभी h2 शीर्षक खोजना

use select::document::Document;
use select::predicate::Name;

fn main() {
    let html = r#"
        <html>
            <body>
                <h2>शीर्षक 1</h2>
                <h2>शीर्षक 2</h2>
                <p>टेक्स्ट</p>
            </body>
        </html>
    "#;

    let document = Document::from(html);
    for node in document.find(Name("h2")) {
        println!("शीर्षक का टेक्स्ट: {}", node.text());
    }
}

3. html5ever — निचले स्तर का पार्सर

html5ever Rust में लिखा गया एक संदर्भ HTML5 पार्सर है। यह अधिकांश अन्य लाइब्रेरी का आधार है। यदि आपको पार्सिंग प्रक्रिया पर अधिकतम नियंत्रण चाहिए, तो इसे सीधे उपयोग करें।

उदाहरण: HTML टोकनाइज़ेशन

use html5ever::tendril::TendrilSink;
use html5ever::parse_document;
use markup5ever::{expanded_name, local_name, namespace_url, ns};

fn main() {
    let html = "<p>Hello, Rust!</p>";
    let dom = parse_document(
        std::rc::Rc::new(std::cell::RefCell::new(vec![])),
        Default::default()
    )
    .from_utf8()
    .read_from(&mut html.as_bytes())
    .unwrap();
}

व्यावहारिक उदाहरण: एक वास्तविक वेबसाइट का पार्सिंग

आइए scraper और reqwest का उपयोग करके एक समाचार वेबसाइट को पार्स करने का पूरा उदाहरण देखें।

use scraper::{Html, Selector};
use reqwest;

#[tokio:                    

अनुशंसाएँ