Quando un'API non basta, puoi sempre ricorrere allo scraping dell'HTML e Rust può aiutarti.

Il web scraping è una tecnica popolare per raccogliere grandi quantità di dati dalle pagine web in modo rapido ed efficiente. In assenza di un'API, il web scraping può essere l'approccio migliore.

La velocità e la sicurezza della memoria di Rust rendono il linguaggio ideale per la creazione di web scraper. Rust ospita molte potenti librerie di analisi ed estrazione dei dati e le sue robuste capacità di gestione degli errori sono utili per una raccolta di dati Web efficiente e affidabile.

Raschiatura Web in ruggine

Molte librerie popolari supportano il web scraping in Rust, incluso reqwest, raschietto, Selezionare, E html5ever. La maggior parte degli sviluppatori di Rust combina le funzionalità di reqwest e scraper per il loro web scraping.

La libreria reqwest fornisce funzionalità per effettuare richieste HTTP ai server web. Reqwest è basato sul built-in di Rust iper crate mentre fornisce un'API di alto livello per le funzionalità HTTP standard.

instagram viewer

Scraper è una potente libreria di web scraping che analizza documenti HTML e XML e estrae i dati utilizzando i selettori CSS ed espressioni XPath.

Dopo aver creato un nuovo progetto Rust con il file carico nuovo comando, aggiungi il reqwest E raschietto crates alla sezione delle dipendenze del tuo cargo.toml file:

[dipendenze]
reqwest = {versione = "0.11", caratteristiche = ["blocco"]}
raschietto = "0.12.0"

Userai reqwest A inviare richieste HTTP E raschietto per l'analisi.

Recupero di pagine Web con Reqwest

Invierai una richiesta per i contenuti di una pagina web prima di analizzarla per recuperare dati specifici.

Puoi inviare una richiesta GET e recuperare il codice sorgente HTML di una pagina utilizzando il file testo funzione sul Ottenere funzione del reqwest biblioteca:

fnrecupera_html() -> Corda {
permettere risposta = ottieni(" https://news.ycombinator.com").unwrap().text().unwrap();
ritorno risposta;
}

IL Ottenere la funzione invia la richiesta alla pagina Web e il file testo La funzione restituisce il testo dell'HTML.

Analisi dell'HTML con Scraper

IL recupera_html La funzione restituisce il testo dell'HTML e dovrai analizzare il testo HTML per recuperare i dati specifici di cui hai bisogno.

Scraper fornisce funzionalità per l'interazione con l'HTML nel file HTML E Selettore moduli. IL HTML Il modulo fornisce funzionalità per l'analisi del documento e il Selettore Il modulo fornisce funzionalità per la selezione di elementi specifici dall'HTML.

Ecco come recuperare tutti i titoli di una pagina:

utilizzo raschietto::{Html, Selettore};

fnprincipale() {
permettere risposta = reqwest:: blocco:: get(
" https://news.ycombinator.com/").unwrap().text().unwrap();

// analizza il documento HTML
permettere doc_body = Html:: parse_document(&response);

// seleziona gli elementi con la classe titleline
permettere title = Selettore:: parse(".titolo").scartare();

per titolo In doc_body.select(&titolo) {
permettere titoli = titolo.testo().collect::<Vec<_>>();
stampa!("{}", titoli[0])
}
}

IL analizza_documento funzione del HTML il modulo analizza il testo HTML e il file Analizza funzione del Selettore module seleziona gli elementi con il selettore CSS specificato (in questo caso, il file titolo classe).

IL per loop attraversa questi elementi e stampa il primo blocco di testo da ciascuno.

Ecco il risultato dell'operazione:

Selezione degli attributi con il raschietto

Per selezionare un valore di attributo, recuperare gli elementi richiesti come prima e utilizzare il attr metodo dell'istanza del valore del tag:

utilizzo reqwest:: blocking:: get;
utilizzo raschietto::{Html, Selettore};

fnprincipale() {
permettere risposta = ottieni(" https://news.ycombinator.com").unwrap().text().unwrap();
permettere html_doc = Html:: parse_document(&response);
permettere class_selector = Selettore:: parse(".titolo").scartare();

per elemento In html_doc.select(&selettore_classe) {
permettere link_selector = Selettore:: analizza("UN").scartare();

per collegamento In element.select(&link_selector) {
SepermettereAlcuni(href) = link.value().attr("ref") {
stampa!("{}", href);
}
}
}
}

Dopo aver selezionato gli elementi con il titolo classe utilizzando il analizzare funzione, il per loop li attraversa. All'interno del ciclo, il codice viene quindi recuperato UN tag e seleziona il file href attributo con il attr funzione.

IL principale la funzione stampa questi collegamenti, con un risultato come questo:

Puoi creare applicazioni Web sofisticate in Rust

Di recente, Rust ha ottenuto l'adozione come linguaggio per lo sviluppo web dallo sviluppo di app front-end a quello lato server.

Puoi sfruttare l'assembly web per creare applicazioni web full-stack con librerie come Yew e Percy o creare lato server applicazioni con Actix, Rocket e l'host di librerie nell'ecosistema Rust che forniscono funzionalità per la creazione di web applicazioni.