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.