Когато API просто не иска да се справи, винаги можете да прибегнете до изтриване на HTML и Rust може да ви помогне.
Уеб скрапирането е популярна техника за бързо и ефективно събиране на големи количества данни от уеб страници. При липса на API, уеб скрапирането може да бъде следващият най-добър подход.
Скоростта на Rust и безопасността на паметта правят езика идеален за изграждане на уеб скрепери. Rust е дом на много мощни библиотеки за анализиране и извличане на данни, а неговите стабилни възможности за обработка на грешки са удобни за ефективно и надеждно събиране на уеб данни.
Web Scraping в Rust
Много популярни библиотеки поддържат уеб скрапинг в Rust, включително reqwest, скрепер, изберете, и html5ever. Повечето разработчици на Rust комбинират функционалност от reqwest и scraper за своето уеб скрапиране.
Библиотеката reqwest предоставя функционалност за отправяне на HTTP заявки към уеб сървъри. Reqwest е изграден върху вградената версия на Rust хипер щайга, като същевременно предоставя API на високо ниво за стандартни HTTP функции.
Scraper е мощна библиотека за уеб скрапиране, която анализира HTML и XML документи и извлича данни с помощта на CSS селектори и XPath изрази.
След създаването на нов проект Rust с товар нов команда, добавете reqwest и скрепер каси към раздела за зависимости на вашия cargo.toml файл:
[зависимости]
reqwest = {версия = "0.11", функции = ["блокиране"]}
скрепер = "0.12.0"
Ще използвате reqwest да се изпращайте HTTP заявки и скрепер за разбор.
Извличане на уеб страници с Reqwest
Ще изпратите заявка за съдържанието на уеб страница, преди да я анализирате, за да извлечете конкретни данни.
Можете да изпратите GET заявка и да извлечете HTML източника на страница, като използвате текст функция на получавам функция на reqwest библиотека:
fnretrieve_html() -> низ {
позволявам отговор = получи(" https://news.ycombinator.com").unwrap().text().unwrap();
връщане отговор;
}
The получавам функцията изпраща заявката до уеб страницата и текст функцията връща текста на HTML.
Разбор на HTML със скрепер
The retrieve_html връща текста на HTML и ще трябва да анализирате HTML текста, за да извлечете конкретните данни, от които се нуждаете.
Scraper предоставя функционалност за взаимодействие с HTML в Html и Селектор модули. The Html модул предоставя функционалност за анализиране на документа и Селектор модул предоставя функционалност за избор на конкретни елементи от HTML.
Ето как можете да извлечете всички заглавия на страница:
използване scraper::{Html, Selector};
fnосновен() {
позволявам отговор = reqwest:: блокиране:: get(
" https://news.ycombinator.com/").unwrap().text().unwrap();// анализираме HTML документа
позволявам doc_body = Html:: parse_document(&response);
// изберете елементите с клас заглавна линия
позволявам заглавие = Селектор:: разбор(".titleline").unwrap();
за заглавие в doc_body.select(&title) {
позволявам заглавия = title.text().collect::<Vec<_>>();
println!("{}", заглавия[0])
}
}
The parse_document функция на Html модул анализира HTML текста и Анализирайте функция на Селектор модул избира елементите с посочения CSS селектор (в този случай, заглавен ред клас).
The за цикъл преминава през тези елементи и отпечатва първия блок текст от всеки.
Ето резултата от операцията:
Избиране на атрибути със скрепер
За да изберете стойност на атрибут, извлечете необходимите елементи както преди и използвайте атрибут метод на екземпляра на стойността на етикета:
използване reqwest:: блокиране:: получаване;
използване scraper::{Html, Selector};fnосновен() {
позволявам отговор = получи(" https://news.ycombinator.com").unwrap().text().unwrap();
позволявам html_doc = Html:: parse_document(&response);
позволявам class_selector = Селектор:: разбор(".titleline").unwrap();за елемент в html_doc.select(&class_selector) {
позволявам link_selector = Селектор:: разбор("а").unwrap();
за връзка в element.select(&link_selector) {
акопозволявамнякои(href) = link.value().attr("href") {
println!("{}", href);
}
}
}
}
След като изберете елементи с заглавен ред клас с помощта на анализирам функция, на за цикъл ги пресича. След това вътре в цикъла кодът се извлича а маркира и избира href атрибут с атрибут функция.
The основен функцията отпечатва тези връзки с резултат като този:
Можете да създавате сложни уеб приложения в Rust
Напоследък Rust се възприема като език за уеб разработка от преден край до разработка на приложения от страна на сървъра.
Можете да използвате уеб асемблирането, за да изградите уеб приложения с пълен стек с библиотеки като Yew и Percy или да изградите от страна на сървъра приложения с Actix, Rocket и множеството библиотеки в екосистемата Rust, които предоставят функционалност за изграждане на уеб приложения.