Cuando una API simplemente no es suficiente, siempre puede recurrir a eliminar HTML y Rust puede ayudarlo.
El raspado web es una técnica popular para recopilar grandes cantidades de datos de páginas web de manera rápida y eficiente. En ausencia de una API, el web scraping puede ser el siguiente mejor enfoque.
La velocidad y la seguridad de la memoria de Rust hacen que el lenguaje sea ideal para crear web scrapers. Rust es el hogar de muchas potentes bibliotecas de análisis y extracción de datos, y sus sólidas capacidades de manejo de errores son útiles para una recopilación de datos web eficiente y confiable.
Web Scraping en Rust
Muchas bibliotecas populares admiten web scraping en Rust, incluyendo solicitar, raspador, seleccionar, y html5 nunca. La mayoría de los desarrolladores de Rust combinan la funcionalidad de reqwest y scraper para su web scraping.
La biblioteca reqwest proporciona funcionalidad para realizar solicitudes HTTP a servidores web. Reqwest se basa en el integrado de Rust hiper crate mientras ofrece una API de alto nivel para funciones HTTP estándar.
Scraper es una poderosa biblioteca de web scraping que analiza documentos HTML y XML y extrae datos usando selectores CSS y expresiones XPath.
Después de crear un nuevo proyecto de Rust con el carga nueva comando, agregue el solicitar y raspador cajas a la sección de dependencias de su carga.toml archivo:
[dependencias]
solicitar = {versión = "0.11", caracteristicas = ["bloqueando"]}
raspador = "0.12.0"
usarás solicitar a enviar solicitudes HTTP y raspador para analizar
Recuperación de páginas web con Reqwest
Enviará una solicitud del contenido de una página web antes de analizarla para recuperar datos específicos.
Puede enviar una solicitud GET y recuperar la fuente HTML de una página usando el texto función en el conseguir función de la solicitar biblioteca:
fnrecuperar_html() -> Cadena {
dejar respuesta = obtener (" https://news.ycombinator.com").desenvolver().texto().desenvolver();
devolver respuesta;
}
El conseguir función envía la solicitud a la página web, y el texto La función devuelve el texto del HTML.
Analizando HTML con Scraper
El recuperar_html La función devuelve el texto del HTML, y deberá analizar el texto HTML para recuperar los datos específicos que necesita.
Scraper proporciona funcionalidad para interactuar con HTML en el html y Selector módulos. El html módulo proporciona funcionalidad para analizar el documento, y el Selector El módulo proporciona funcionalidad para seleccionar elementos específicos del HTML.
Así es como puede recuperar todos los títulos en una página:
usar raspador::{Html, Selector};
fnprincipal() {
dejar respuesta = solicitud:: bloqueo:: get(
" https://news.ycombinator.com/").desenvolver().texto().desenvolver();// analiza el documento HTML
dejar doc_body = Html:: parse_document(&response);
// selecciona los elementos con la clase titleline
dejar título = Selector:: parse(".titleline").desenvolver();
para título en doc_body.select(&título) {
dejar títulos = título.texto().recoger::<Vec<_>>();
imprimir!("{}", títulos[0])
}
}
El parse_document función de la html El módulo analiza el texto HTML y el Analizar gramaticalmente función de la Selector módulo selecciona los elementos con el selector CSS especificado (en este caso, el línea de título clase).
El para loop atraviesa estos elementos e imprime el primer bloque de texto de cada uno.
Este es el resultado de la operación:
Selección de atributos con raspador
Para seleccionar un valor de atributo, recupere los elementos requeridos como antes y use el atributo método de la instancia de valor de etiqueta:
usar solicitud:: bloqueo:: get;
usar raspador::{Html, Selector};fnprincipal() {
dejar respuesta = obtener (" https://news.ycombinator.com").desenvolver().texto().desenvolver();
dejar html_doc = Html:: parse_document(&response);
dejar class_selector = Selector:: parse(".titleline").desenvolver();para elemento en html_doc.select(&class_selector) {
dejar link_selector = Selector:: parse("a").desenvolver();
para enlace en elemento.select(&selector_enlace) {
sidejarAlguno(href) = enlace.valor().attr("href") {
imprimir!("{}", href);
}
}
}
}
Después de seleccionar elementos con el línea de título clase usando el analizar gramaticalmente función, la para el bucle los atraviesa. Dentro del bucle, el código obtiene a etiquetas y selecciona el href atributo con el atributo función.
El principal La función imprime estos enlaces, con un resultado como este:
Puede crear aplicaciones web sofisticadas en Rust
Recientemente, Rust ha ganado adopción como lenguaje para el desarrollo web desde el front-end hasta el desarrollo de aplicaciones del lado del servidor.
Puede aprovechar el ensamblaje web para crear aplicaciones web de pila completa con bibliotecas como Yew y Percy o crear del lado del servidor aplicaciones con Actix, Rocket y la gran cantidad de bibliotecas en el ecosistema de Rust que brindan funcionalidad para crear aplicaciones web aplicaciones