Quando uma API simplesmente não funciona, você sempre pode recorrer à raspagem de HTML e o Rust pode ajudá-lo.
A raspagem da Web é uma técnica popular para coletar grandes quantidades de dados de páginas da Web de maneira rápida e eficiente. Na ausência de uma API, o web scraping pode ser a próxima melhor abordagem.
A velocidade e a segurança da memória do Rust tornam a linguagem ideal para a construção de web scrapers. Rust é o lar de muitas bibliotecas poderosas de análise e extração de dados, e seus recursos robustos de tratamento de erros são úteis para uma coleta de dados da web eficiente e confiável.
Web Scraping em Rust
Muitas bibliotecas populares suportam web scraping em Rust, incluindo pedir, raspador, selecionar, e html5ever. A maioria dos desenvolvedores Rust combina a funcionalidade de reqwest e scraper para sua raspagem na web.
A biblioteca reqwest fornece funcionalidade para fazer solicitações HTTP para servidores da web. Reqwest é construído sobre o built-in do Rust hiper crate enquanto fornece uma API de alto nível para recursos HTTP padrão.
O Scraper é uma poderosa biblioteca de raspagem da Web que analisa documentos HTML e XML e extrai dados usando seletores CSS e expressões XPath.
Depois de criar um novo projeto Rust com o carga nova comando, adicione o pedir e raspador caixas para a seção de dependências do seu cargo.toml arquivo:
[dependências]
pedir = {versão = "0.11", características = ["bloqueio"]}
raspador = "0.12.0"
você vai usar pedir para enviar solicitações HTTP e raspador para análise.
Recuperando páginas da Web com Reqwest
Você enviará uma solicitação para o conteúdo de uma página da Web antes de analisá-la para recuperar dados específicos.
Você pode enviar uma solicitação GET e recuperar o código-fonte HTML de uma página usando o texto função no pegar função do pedir biblioteca:
fnrecuperar_html() -> Corda {
deixar resposta = get(" https://news.ycombinator.com").unwrap().text().unwrap();
retornar resposta;
}
O pegar A função envia a solicitação para a página da Web e o texto função retorna o texto do HTML.
Analisando HTML com Scraper
O recuperar_html A função retorna o texto do HTML e você precisará analisar o texto HTML para recuperar os dados específicos de que precisa.
O Scraper fornece funcionalidade para interagir com HTML no HTML e Seletor módulos. O HTML módulo fornece funcionalidade para analisar o documento, e o módulo Seletor O módulo fornece funcionalidade para selecionar elementos específicos do HTML.
Veja como você pode recuperar todos os títulos em uma página:
usar raspador::{Html, Seletor};
fnprincipal() {
deixar resposta = reqwest:: bloqueando:: get(
" https://news.ycombinator.com/").unwrap().text().unwrap();// analisa o documento HTML
deixar doc_body = Html:: parse_document(&resposta);
// seleciona os elementos com a classe titleline
deixar titulo = Seletor:: parse(".título").desembrulhar();
para título em doc_body.select(&title) {
deixar títulos = title.text().collect::<vec<_>>();
println!("{}", títulos[0])
}
}
O parse_document função do HTML módulo analisa o texto HTML e o Analisar função do Seletor módulo seleciona os elementos com o seletor CSS especificado (neste caso, o título aula).
O para loop percorre esses elementos e imprime o primeiro bloco de texto de cada um.
Veja o resultado da operação:
Selecionando atributos com raspador
Para selecionar um valor de atributo, recupere os elementos necessários como antes e use o atrair método da instância do valor da tag:
usar reqwest:: bloqueio:: get;
usar raspador::{Html, Seletor};fnprincipal() {
deixar resposta = get(" https://news.ycombinator.com").unwrap().text().unwrap();
deixar html_doc = Html:: parse_document(&response);
deixar class_selector = Seletor:: parse(".título").desembrulhar();para elemento em html_doc.select(&class_selector) {
deixar link_selector = Seletor:: parse("a").desembrulhar();
para link em element.select(&link_selector) {
sedeixarAlguns(href) = link.value().attr("href") {
println!("{}", href);
}
}
}
}
Depois de selecionar os elementos com o título classe usando o analisar função, o para loop os atravessa. Dentro do loop, o código busca a marca e seleciona o href atributo com o atrair função.
O principal A função imprime esses links, com um resultado como este:
Você pode construir aplicativos da Web sofisticados em Rust
Recentemente, o Rust vem ganhando adoção como uma linguagem para desenvolvimento web desde front-end até o desenvolvimento de aplicativos do lado do servidor.
Você pode aproveitar o web assembly para criar aplicativos da web full-stack com bibliotecas como Yew e Percy ou construir do lado do servidor aplicativos com Actix, Rocket e o host de bibliotecas no ecossistema Rust que fornecem funcionalidade para criar formulários.