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

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

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

ابدأ الدورة

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



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



لماذا Rust لتحليل HTML؟



تحليل HTML هي مهمة تتطلب إدارة فعالة للذاكرة ومعالجة صارمة للأخطاء. توفر Rust:



  • تكلفة صفرية للتجريدات — سرعة تنفيذ عالية
  • إدارة آمنة للذاكرة بدون جامع القمامة
  • نظام أنواع قوي يمنع الأخطاء في مرحلة التجميع
  • مجتمع نشط والعديد من المكتبات لاستخراج بيانات الويب


المكتبات الرئيسية لتحليل HTML في Rust



1. scraper — المكتبة الأكثر شيوعًا



توفر مكتبة scraper واجهة برمجة تطبيقات مريحة للتنقل في شجرة DOM باستخدام محددات CSS. وهي مبنية على أساس المحلل 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 هو المحلل المرجعي لـ HTML5، مكتوب بلغة Rust. وهو أساس معظم المكتبات الأخرى. إذا كنت بحاجة إلى أقصى قدر من التحكم في عملية التحليل، فاستخدمه مباشرة.



مثال: تحليل 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 و reqw

توصيات