عندما لا تقوم واجهة برمجة التطبيقات بقصها ، يمكنك دائمًا اللجوء إلى تجريف HTML ، ويمكن أن يساعدك Rust في ذلك.

يعد تجريف الويب أسلوبًا شائعًا لجمع كميات كبيرة من البيانات من صفحات الويب بسرعة وكفاءة. في حالة عدم وجود واجهة برمجة تطبيقات ، يمكن أن يكون تجريف الويب هو النهج التالي الأفضل.

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

تجريف الويب في الصدأ

تدعم العديد من المكتبات الشائعة تجريف الويب في Rust ، بما في ذلك ريكويست, مكشطة, يختار، و html5ever. يجمع معظم مطوري Rust بين الوظائف من reqwest و scraper من أجل تجريف الويب الخاص بهم.

توفر مكتبة reqwest وظائف لعمل طلبات HTTP لخوادم الويب. تم بناء Reqwest على أساس Rust's المدمج مفرط قفص أثناء تقديم واجهة برمجة تطبيقات عالية المستوى لميزات HTTP القياسية.

مكشطة هي مكتبة كشط ويب قوية تقوم بتوزيع مستندات HTML و XML وملفات يستخرج البيانات باستخدام محددات CSS وتعبيرات XPath.

بعد إنشاء مشروع Rust جديد باستخدام

instagram viewer
شحنة جديدة الأمر ، أضف ريكويست و مكشطة صناديق إلى قسم التبعيات في ملف شحن ملف:

[التبعيات]
ريكويست = {الإصدار = "0.11"، الميزات = ["منع"]}
مكشطة = "0.12.0"

سوف تستخدم ريكويست ل إرسال طلبات HTTP و مكشطة للتحليل.

استرداد صفحات الويب مع Reqwest

سترسل طلبًا لمحتويات صفحة ويب قبل تحليلها لاسترداد بيانات محددة.

يمكنك إرسال طلب GET واسترداد مصدر HTML للصفحة باستخدام ملف نص تعمل على يحصل وظيفة ريكويست مكتبة:

الجبهة الوطنيةاسترداد_ html() -> خيط {
يترك استجابة = الحصول على (" https://news.ycombinator.com") .unwrap (). text (). unsrap () ؛
يعود إجابة؛
}

ال يحصل ترسل الوظيفة الطلب إلى صفحة الويب ، و نص تقوم الدالة بإرجاع نص HTML.

تحليل HTML باستخدام مكشطة

ال استرداد_ html تقوم الدالة بإرجاع نص HTML ، وستحتاج إلى تحليل نص HTML لاسترداد البيانات المحددة التي تحتاجها.

يوفر Scraper وظائف للتفاعل مع HTML في ملف لغة البرمجة و محدد الوحدات. ال لغة البرمجة توفر الوحدة النمطية وظائف لتحليل المستند ، و محدد توفر الوحدة وظائف لاختيار عناصر محددة من HTML.

إليك كيفية استرداد جميع العناوين في الصفحة:

يستخدم مكشطة:: {Html، Selector}؛

الجبهة الوطنيةرئيسي() {
يترك الاستجابة = reqwest:: blocking:: get (
" https://news.ycombinator.com/") .unwrap (). text (). unsrap () ؛

// تحليل مستند HTML
يترك doc_body = Html:: parse_document (والاستجابة) ؛

// حدد العناصر مع فئة titleline
يترك العنوان = المحدد:: تحليل (".titleline").بسط()؛

ل عنوان في doc_body.select (& title) {
يترك العناوين = title.text (). جمع:: <Vec<_>>();
println!("{}"، العناوين [0])
}
}

ال parse_document وظيفة لغة البرمجة وحدة بتوزيع نص HTML ، و تحليل وظيفة محدد الوحدة النمطية العناصر مع محدد CSS المحدد (في هذه الحالة ، ملف العنوان فصل).

ال ل تعبر loop خلال هذه العناصر وتطبع أول كتلة نصية من كل منها.

إليكم نتيجة العملية:

اختيار السمات مع مكشطة

لتحديد قيمة سمة ، قم باسترداد العناصر المطلوبة كما كان من قبل واستخدم أتر طريقة مثيل قيمة العلامة:

يستخدم reqwest:: blocking:: get؛
يستخدم مكشطة:: {Html، Selector}؛

الجبهة الوطنيةرئيسي() {
يترك استجابة = الحصول على (" https://news.ycombinator.com") .unwrap (). text (). unsrap () ؛
يترك html_doc = Html:: parse_document (& response) ؛
يترك class_selector = المحدد:: تحليل (".titleline").بسط()؛

ل عنصر في html_doc.select (& class_selector) {
يترك link_selector = المحدد:: تحليل ("أ").بسط()؛

ل وصلة في element.select (& link_selector) {
لويتركبعض(href) = link.value (). attr ("href") {
println!("{}"، href) ؛
}
}
}
}

بعد اختيار العناصر بامتداد العنوان فئة باستخدام تحليل وظيفة ل حلقة تعبرهم. داخل الحلقة ، يتم جلب الرمز بعد ذلك أ العلامات ويحدد ملفات href السمة مع أتر وظيفة.

ال رئيسي تقوم الوظيفة بطباعة هذه الروابط ، مع نتيجة مثل هذه:

يمكنك إنشاء تطبيقات ويب متطورة في Rust

في الآونة الأخيرة ، اكتسبت Rust اعتمادًا كلغة لتطوير الويب من الواجهة الأمامية إلى تطوير التطبيقات من جانب الخادم.

يمكنك الاستفادة من تجميع الويب لإنشاء تطبيقات ويب كاملة المكدس باستخدام مكتبات مثل Yew و Percy أو إنشاء جانب الخادم تطبيقات مع Actix و Rocket ومجموعة المكتبات في نظام Rust البيئي التي توفر وظائف لبناء الويب التطبيقات.