Kada API jednostavno ne radi, uvijek možete pribjeći struganju HTML-a, a Rust vam može pomoći.

Web scraping popularna je tehnika za brzo i učinkovito prikupljanje velikih količina podataka s web stranica. U nedostatku API-ja, web scraping može biti sljedeći najbolji pristup.

Rustova brzina i sigurnost memorije čine ovaj jezik idealnim za izradu mrežnih strugača. Rust je dom mnogim snažnim bibliotekama za parsiranje i ekstrakciju podataka, a njegove snažne mogućnosti rukovanja pogreškama korisne su za učinkovito i pouzdano prikupljanje web podataka.

Struganje weba u Rustu

Mnoge popularne knjižnice podržavaju struganje weba u Rustu, uključujući reqwest, strugač, Izaberi, i html5ever. Većina Rust programera kombinira funkcionalnost iz reqwesta i scrapera za svoje web scraping.

Knjižnica reqwest pruža funkcionalnost za upućivanje HTTP zahtjeva web poslužiteljima. Reqwest je izgrađen na ugrađenom Rustu hiper sanduk isporučujući API visoke razine za standardne HTTP značajke.

Scraper je moćna biblioteka za struganje weba koja analizira HTML i XML dokumente i

izvlači podatke pomoću CSS selektora i XPath izraze.

Nakon stvaranja novog Rust projekta s teret nov naredba, dodajte reqwest i strugač sanduke u odjeljak ovisnosti vašeg teret.toml datoteka:

[ovisnosti]
reqwest = {verzija = "0.11", karakteristike = ["blokiranje"]}
strugač = "0.12.0"

Vi ćete koristiti reqwest do poslati HTTP zahtjeve i strugač za raščlanjivanje.

Dohvaćanje web stranica s Reqwestom

Poslat ćete zahtjev za sadržajem web-stranice prije nego što je analizirate kako biste dohvatili određene podatke.

Možete poslati GET zahtjev i dohvatiti HTML izvor stranice pomoću tekst funkcija na dobiti funkcija reqwest knjižnica:

fndohvati_html() -> Niz {
neka odgovor = dobiti(" https://news.ycombinator.com").unwrap().text().unwrap();
povratak odgovor;
}

The dobiti funkcija šalje zahtjev web stranici, a tekst funkcija vraća tekst HTML-a.

Raščlanjivanje HTML-a pomoću strugača

The dohvati_html funkcija vraća tekst HTML-a, a vi ćete morati raščlaniti HTML tekst da biste dohvatili određene podatke koji su vam potrebni.

Scraper pruža funkcionalnost za interakciju s HTML-om u Html i Selektor moduli. The Html modul pruža funkcionalnost za analizu dokumenta i Selektor modul pruža funkcionalnost za odabir određenih elemenata iz HTML-a.

Evo kako možete dohvatiti sve naslove na stranici:

koristiti scraper::{Html, Selector};

fnglavni() {
neka odgovor = reqwest:: blokiranje:: get(
" https://news.ycombinator.com/").unwrap().text().unwrap();

// analizirati HTML dokument
neka doc_body = Html:: parse_document(&response);

// odaberite elemente s klasom naslovne linije
neka title = Selector:: parse(".titleline").razmotati();

za titula u doc_body.select(&title) {
neka naslovi = naslov.tekst().prikupi::<Vec<_>>();
println!("{}", naslovi[0])
}
}

The raščlaniti_dokument funkcija Html modul analizira HTML tekst i Raščlanjivati funkcija Selektor modul odabire elemente s navedenim CSS selektorom (u ovom slučaju, naslovni redak razred).

The za petlja prolazi kroz te elemente i ispisuje prvi blok teksta iz svakog.

Evo rezultata operacije:

Odabir atributa pomoću strugača

Za odabir vrijednosti atributa dohvatite potrebne elemente kao i prije i upotrijebite attr metoda instance vrijednosti oznake:

koristiti reqwest:: blokiranje:: dobiti;
koristiti scraper::{Html, Selector};

fnglavni() {
neka odgovor = dobiti(" https://news.ycombinator.com").unwrap().text().unwrap();
neka html_doc = Html:: parse_document(&response);
neka class_selector = Selektor:: parse(".titleline").razmotati();

za element u html_doc.select(&class_selector) {
neka link_selector = Selektor:: parse("a").razmotati();

za veza u element.select(&link_selector) {
akonekaNeki(href) = link.value().attr("href") {
println!("{}", href);
}
}
}
}

Nakon odabira elemenata s naslovni redak klasa pomoću raščlaniti funkcija, za petlja prolazi kroz njih. Unutar petlje, kod se zatim dohvaća a označava i odabire href atribut s attr funkcija.

The glavni funkcija ispisuje ove veze, s rezultatom poput ovog:

Možete izraditi sofisticirane web aplikacije u Rustu

Nedavno se Rust sve više prihvaća kao jezik za web razvoj od front-enda do razvoja aplikacija na strani poslužitelja.

Možete iskoristiti web asembler za izradu full-stack web aplikacija s bibliotekama kao što su Yew i Percy ili za izgradnju na strani poslužitelja aplikacije s Actixom, Rocketom i mnoštvom biblioteka u Rust ekosustavu koje pružaju funkcionalnost za izradu weba aplikacije.