Kiedy interfejs API po prostu tego nie załatwi, zawsze możesz uciec się do skrobania kodu HTML, a Rust może ci w tym pomóc.
Web scraping to popularna technika szybkiego i wydajnego zbierania dużych ilości danych ze stron internetowych. W przypadku braku interfejsu API, web scraping może być kolejnym najlepszym podejściem.
Szybkość i bezpieczeństwo pamięci Rust sprawiają, że język ten jest idealny do tworzenia skrobaków internetowych. Rust jest domem dla wielu potężnych bibliotek do analizowania i ekstrakcji danych, a jego solidne możliwości obsługi błędów są przydatne do wydajnego i niezawodnego gromadzenia danych internetowych.
Skrobanie sieci w Rust
Wiele popularnych bibliotek obsługuje web scraping w Rust, w tym prośba, skrobak, wybierać, I html5ever. Większość programistów Rust łączy funkcjonalność reqwest i scraper do ich przeglądania stron internetowych.
Biblioteka reqwest zapewnia funkcjonalność do wysyłania żądań HTTP do serwerów WWW. Reqwest jest zbudowany na wbudowanym Ruście hiper crate przy jednoczesnym dostarczaniu API wysokiego poziomu dla standardowych funkcji HTTP.
Scraper to potężna biblioteka do skrobania stron internetowych, która analizuje dokumenty HTML i XML oraz wyodrębnia dane za pomocą selektorów CSS i wyrażenia XPath.
Po utworzeniu nowego projektu w Rust za pomocą ładunek nowy polecenie, dodaj prośba I skrobak crates do sekcji zależności pliku your ładunek.toml plik:
[zależności]
prośba = {wersja = "0.11", funkcje = ["bloking"]}
skrobak = "0.12.0"
użyjesz prośba Do wysyłać żądania HTTP I skrobak do analizowania.
Pobieranie stron internetowych za pomocą Reqwest
Wyślesz żądanie dotyczące zawartości strony internetowej przed jej przeanalizowaniem w celu pobrania określonych danych.
Możesz wysłać żądanie GET i pobrać źródło HTML strony za pomocą tekst funkcja na Dostawać funkcja prośba biblioteka:
przyppobierz_html() -> Strunowy {
pozwalać odpowiedź = pobierz(" https://news.ycombinator.com".unwrap().text().unwrap();
powrót odpowiedź;
}
The Dostawać funkcja wysyła żądanie do strony internetowej, a tekst funkcja zwraca tekst kodu HTML.
Parsowanie HTML za pomocą skrobaka
The pobierz_html funkcja zwraca tekst kodu HTML i będziesz musiał przeanalizować tekst HTML, aby pobrać określone dane, których potrzebujesz.
Scraper zapewnia funkcjonalność do interakcji z HTML w HTML I Selektor moduły. The HTML moduł zapewnia funkcjonalność do analizowania dokumentu, a Selektor moduł udostępnia funkcjonalność wyboru określonych elementów z kodu HTML.
Oto jak możesz odzyskać wszystkie tytuły na stronie:
używać skrobak::{Html, selektor};
przypgłówny() {
pozwalać odpowiedź = reqwest:: blokowanie:: get(
" https://news.ycombinator.com/".unwrap().text().unwrap();// przeanalizuj dokument HTML
pozwalać doc_body = Html:: parse_document(&response);
// wybierz elementy z klasą titleline
pozwalać tytuł = Selektor:: parse(„.tytuł”).odwijać się();
Do tytuł W doc_body.select(&tytuł) {
pozwalać tytuły = tytuł.tekst().zbierz::<Vec<_>>();
drukuj!("{}", tytuły[0])
}
}
The parse_document funkcja HTML moduł analizuje tekst HTML, a plik Analizować funkcja Selektor moduł wybiera elementy za pomocą określonego selektora CSS (w tym przypadku tytuł klasa).
The Do pętla przechodzi przez te elementy i drukuje pierwszy blok tekstu z każdego z nich.
Oto wynik operacji:
Wybieranie atrybutów za pomocą skrobaka
Aby wybrać wartość atrybutu, pobierz wymagane elementy jak poprzednio i użyj atr metoda instancji wartości tagu:
używać reqwest:: blokowanie:: pobierz;
używać skrobak::{Html, selektor};przypgłówny() {
pozwalać odpowiedź = pobierz(" https://news.ycombinator.com".unwrap().text().unwrap();
pozwalać html_doc = Html:: parse_document(&response);
pozwalać class_selector = Selektor:: parse(„.tytuł”).odwijać się();Do element W html_doc.select(&class_selector) {
pozwalać link_selector = Selektor:: parse("A").odwijać się();
Do połączyć W element.select(&link_selector) {
JeślipozwalaćNiektóre(href) = link.value().attr(„href”) {
drukuj!("{}", href);
}
}
}
}
Po wybraniu elementów za pomocą tytuł klasa za pomocą analizować funkcja, tzw Do pętla je przecina. Wewnątrz pętli kod jest następnie pobierany A tagi i wybiera href atrybut z atr funkcjonować.
The główny funkcja drukuje te linki, z wynikiem takim jak ten:
Możesz tworzyć zaawansowane aplikacje internetowe w Rust
Ostatnio Rust zyskuje popularność jako język do tworzenia stron internetowych, od front-endu po tworzenie aplikacji po stronie serwera.
Możesz wykorzystać asembler webowy do budowania pełnych aplikacji webowych z bibliotekami takimi jak Yew i Percy lub budować po stronie serwera aplikacje z Actix, Rocket i hostem bibliotek w ekosystemie Rust, które zapewniają funkcjonalność do tworzenia sieci Aplikacje.