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.
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.