Când un API pur și simplu nu îl va tăia, puteți recurge oricând la scraping HTML, iar Rust vă poate ajuta.
Web scraping este o tehnică populară pentru a culege cantități mari de date de pe paginile web rapid și eficient. În absența unui API, web scraping poate fi următoarea cea mai bună abordare.
Viteza Rust și siguranța memoriei fac limbajul ideal pentru construirea de răzuitoare web. Rust găzduiește multe biblioteci puternice de analiză și extracție a datelor, iar capabilitățile sale robuste de gestionare a erorilor sunt utile pentru colectarea de date web eficientă și fiabilă.
Scraping Web în Rust
Multe biblioteci populare acceptă web scraping în Rust, inclusiv reqwest, răzuitor, Selectați, și html5ever. Majoritatea dezvoltatorilor Rust combină funcționalitățile de la reqwest și scraper pentru web scraping.
Biblioteca reqwest oferă funcționalitate pentru efectuarea de solicitări HTTP către serverele web. Reqwest este construit pe baza încorporată a lui Rust hiper crate oferind în același timp un API de nivel înalt pentru caracteristicile standard HTTP.
Scraper este o bibliotecă web puternică de scraping care analizează documente HTML și XML și extrage datele folosind selectoare CSS și expresii XPath.
După crearea unui nou proiect Rust cu marfa noua comanda, adăugați reqwest și răzuitor lăzi la secțiunea de dependențe a dvs încărcătură.toml fişier:
[dependențe]
reqwest = {versiunea = "0.11", caracteristici = ["blocare"]}
răzuitor = "0.12.0"
Vei folosi reqwest la trimite cereri HTTP și răzuitor pentru analizare.
Preluarea paginilor web cu Reqwest
Veți trimite o solicitare pentru conținutul unei pagini web înainte de a o analiza pentru a prelua date specifice.
Puteți trimite o solicitare GET și puteți prelua sursa HTML a unei pagini folosind text funcția pe obține funcția de reqwest bibliotecă:
fnretrieve_html() -> Şir {
lăsa raspuns = obtine(" https://news.ycombinator.com").unwrap().text().unwrap();
întoarcere raspuns;
}
The obține funcția trimite cererea către pagina web și text funcția returnează textul HTML.
Analizarea HTML cu Scraper
The retrieve_html funcția returnează textul HTML și va trebui să analizați textul HTML pentru a prelua datele specifice de care aveți nevoie.
Scraper oferă funcționalitate pentru interacțiunea cu HTML în HTML și Selector module. The HTML modulul oferă funcționalitate pentru analizarea documentului și Selector modulul oferă funcționalitate pentru selectarea anumitor elemente din HTML.
Iată cum puteți prelua toate titlurile de pe o pagină:
utilizare scraper::{Html, Selector};
fnprincipal() {
lăsa răspuns = reqwest:: blocare:: get(
" https://news.ycombinator.com/").unwrap().text().unwrap();// analizează documentul HTML
lăsa doc_body = Html:: parse_document(&response);
// selectează elementele cu clasa de titlu
lăsa titlu = Selector:: parse(„.titleline”).unwrap();
pentru titlu în doc_body.select(&titlu) {
lăsa titluri = title.text().collect::<Vec<_>>();
println!("{}", titluri[0])
}
}
The parse_document funcția de HTML modulul analizează textul HTML și Analiza funcția de Selector modulul selectează elementele cu selectorul CSS specificat (în acest caz, linia de titlu clasă).
The pentru bucla traversează aceste elemente și tipărește primul bloc de text din fiecare.
Iată rezultatul operației:
Selectarea atributelor cu Scraper
Pentru a selecta o valoare de atribut, preluați elementele necesare ca înainte și utilizați attr metoda instanței valorii etichetei:
utilizare reqwest:: blocking:: get;
utilizare scraper::{Html, Selector};fnprincipal() {
lăsa raspuns = obtine(" https://news.ycombinator.com").unwrap().text().unwrap();
lăsa html_doc = Html:: parse_document(&response);
lăsa class_selector = Selector:: parse(„.titleline”).unwrap();pentru element în html_doc.select(&class_selector) {
lăsa link_selector = Selector:: parse("A").unwrap();
pentru legătură în element.select(&link_selector) {
dacălăsaniste(href) = link.value().attr("href") {
println!("{}", href);
}
}
}
}
După selectarea elementelor cu linia de titlu clasa folosind analiza funcția, cea pentru bucla le traversează. În interiorul buclei, codul este apoi preluat A etichetează și selectează href atributul cu attr funcţie.
The principal funcția imprimă aceste link-uri, cu un rezultat ca acesta:
Puteți construi aplicații web sofisticate în Rust
Recent, Rust a câștigat adoptarea ca limbaj pentru dezvoltarea web, de la dezvoltarea de aplicații front-end la server.
Puteți folosi asamblarea web pentru a construi aplicații web cu stivă completă cu biblioteci precum Yew și Percy sau puteți construi pe server aplicații cu Actix, Rocket și multitudinea de biblioteci din ecosistemul Rust care oferă funcționalități pentru construirea web aplicatii.