Ko API preprosto ne deluje, se lahko vedno zatečete k strganju HTML in Rust vam lahko pomaga.
Spletno strganje je priljubljena tehnika za hitro in učinkovito zbiranje velikih količin podatkov s spletnih strani. Če API-ja ni, je lahko spletno strganje naslednji najboljši pristop.
Zaradi hitrosti in varnosti pomnilnika Rust je jezik idealen za gradnjo spletnih strgal. Rust je dom številnih zmogljivih knjižnic za razčlenjevanje in ekstrakcijo podatkov, njegove robustne zmožnosti za obravnavanje napak pa so priročne za učinkovito in zanesljivo zbiranje spletnih podatkov.
Spletno strganje v Rust
Številne priljubljene knjižnice podpirajo spletno strganje v Rustu, vključno s reqwest, strgalo, izberite, in html5ever. Večina razvijalcev Rust združuje funkcionalnost reqwesta in strgala za svoje spletno strganje.
Knjižnica reqwest ponuja funkcionalnost za pošiljanje zahtev HTTP spletnim strežnikom. Reqwest je zgrajen na vgrajenem sistemu Rust hiper zaboj, hkrati pa ponuja API na visoki ravni za standardne funkcije HTTP.
Scraper je zmogljiva spletna knjižnica za strganje, ki razčlenjuje dokumente HTML in XML ter ekstrahira podatke z uporabo izbirnikov CSS in izrazi XPath.
Po ustvarjanju novega projekta Rust z tovor nov ukaz dodajte reqwest in strgalo zabojev v razdelek odvisnosti vašega tovor.toml mapa:
[odvisnosti]
reqwest = {različica = "0.11", funkcije = ["blokiranje"]}
strgalo = "0.12.0"
Uporabili boste reqwest do pošiljanje zahtev HTTP in strgalo za razčlenjevanje.
Pridobivanje spletnih strani z Reqwestom
Poslali boste zahtevo za vsebino spletne strani, preden jo boste razčlenili za pridobitev določenih podatkov.
Lahko pošljete zahtevo GET in pridobite izvor HTML strani z uporabo besedilo funkcijo na dobiti funkcija reqwest knjižnica:
fnpridobi_html() -> Vrvica {
pustiti odgovor = dobim(" https://news.ycombinator.com").unwrap().text().unwrap();
vrnitev odgovor;
}
The dobiti funkcija pošlje zahtevo spletni strani, in besedilo funkcija vrne besedilo HTML.
Razčlenjevanje HTML s strgalom
The pridobi_html funkcija vrne besedilo HTML in boste morali razčleniti besedilo HTML, da pridobite določene podatke, ki jih potrebujete.
Scraper ponuja funkcionalnost za interakcijo s HTML v Html in Selektor moduli. The Html modul zagotavlja funkcionalnost za razčlenjevanje dokumenta in Selektor modul nudi funkcionalnost za izbiro določenih elementov iz HTML-ja.
Takole lahko pridobite vse naslove na strani:
uporaba strgalo::{Html, Izbirnik};
fnglavni() {
pustiti odziv = reqwest:: blokiranje:: get(
" https://news.ycombinator.com/").unwrap().text().unwrap();// razčlenimo dokument HTML
pustiti doc_body = Html:: parse_document(&response);
// izberite elemente z razredom naslovne vrstice
pustiti naslov = Izbirnik:: razčleni(".titleline").unwrap();
za naslov v doc_body.select(&naslov) {
pustiti titles = title.text().collect::<Vec<_>>();
println!("{}", naslovi [0])
}
}
The razčleniti_dokument funkcija Html modul razčleni besedilo HTML in Razčleni funkcija Selektor modul izbere elemente z določenim izbirnikom CSS (v tem primeru naslovna vrstica razred).
The za zanka prečka te elemente in iz vsakega natisne prvi blok besedila.
Tukaj je rezultat operacije:
Izbiranje atributov s strgalom
Če želite izbrati vrednost atributa, pridobite zahtevane elemente kot prej in uporabite attr metoda primerka vrednosti oznake:
uporaba reqwest:: blokiranje:: pridobi;
uporaba strgalo::{Html, Izbirnik};fnglavni() {
pustiti odgovor = dobim(" https://news.ycombinator.com").unwrap().text().unwrap();
pustiti html_doc = Html:: parse_document(&response);
pustiti class_selector = Izbirnik:: razčleni(".titleline").unwrap();za element v html_doc.select(&class_selector) {
pustiti link_selector = Izbirnik:: razčleni("a").unwrap();
za povezava v element.select(&link_selector) {
čepustitinekaj(href) = link.value().attr("href") {
println!("{}", href);
}
}
}
}
Po izbiri elementov z naslovna vrstica razred z uporabo razčleniti funkcija, za zanka jih prečka. Znotraj zanke se koda nato pridobi a oznake in izbere href atribut z attr funkcijo.
The glavni funkcija natisne te povezave z rezultatom, kot je ta:
V Rustu lahko izdelate prefinjene spletne aplikacije
V zadnjem času se Rust vse bolj uveljavlja kot jezik za spletni razvoj od sprednjega dela do razvoja aplikacij na strani strežnika.
Spletno sestavljanje lahko izkoristite za izdelavo spletnih aplikacij s polnim skladom s knjižnicami, kot sta Yew in Percy, ali gradnjo na strani strežnika aplikacije z Actixom, Rocketom in množico knjižnic v ekosistemu Rust, ki zagotavljajo funkcionalnost za gradnjo spleta aplikacije.