تحليل HTML في Rust: المكتبات والأدوات وأمثلة الكود

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

تحليل HTML في Rust: نظرة عامة على المكتبات وأمثلة عملية



Rust هي لغة برمجة نظامية تكتسب شعبية في مهام استخراج بيانات الويب وتحليل HTML بفضل أدائها العالي وأمان الذاكرة والكتابة الصارمة. في هذه المقالة، سنستعرض المكتبات الرئيسية لتحليل HTML في Rust، وإمكانياتها، وسنقدم أمثلة كود لكل منها.



1. مكتبة scraper



scraper هي واحدة من أشهر وأسهل المكتبات لتحليل HTML في Rust. وهي مبنية على أساس html5ever (محلل HTML5) وتوفر واجهة برمجة تطبيقات عالية المستوى للتنقل في شجرة DOM باستخدام محددات CSS.



التثبيت

[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
  • دعم جميع الفئات الزائفة القياسية والموحدات
  • أداء عالٍ
  • توثيق جيد


2. مكتبة select.rs



select.rs هي مكتبة قوية أخرى لتحليل HTML، مبنية على html5ever. تقدم واجهة برمجة تطبيقات مشابهة لـ jQuery، مما يجعلها مريحة بشكل خاص للمطورين الملمين بـ 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">Example</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 هي محلل HTML5 منخفض المستوى، مكتوب بلغة Rust. وهي الأساس للعديد من المكتبات الأخرى (بما في ذلك 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,

توصيات