Když to rozhraní API prostě nevyřeší, můžete se vždy uchýlit ke scrapingu HTML a Rust vám může pomoci.
Web scraping je oblíbená technika pro rychlé a efektivní shromažďování velkého množství dat z webových stránek. Při absenci API může být web scraping dalším nejlepším přístupem.
Díky rychlosti a bezpečnosti paměti Rust je jazyk ideální pro vytváření webových škrabek. Rust je domovem mnoha výkonných knihoven pro analýzu a extrakci dat a jeho robustní možnosti zpracování chyb jsou užitečné pro efektivní a spolehlivý sběr webových dat.
Web škrábání v rezu
Mnoho populárních knihoven podporuje web scraping v Rustu, včetně reqwest, škrabka, vybrat, a html5ever. Většina vývojářů Rust kombinuje funkce z reqwest a scraper pro jejich web scraping.
Knihovna reqwest poskytuje funkce pro vytváření požadavků HTTP na webové servery. Reqwest je postaven na vestavbě Rust hyper crate a zároveň poskytuje rozhraní API na vysoké úrovni pro standardní funkce HTTP.
Scraper je výkonná knihovna pro stírání webu, která analyzuje dokumenty HTML a XML extrahuje data pomocí CSS selektorů a výrazy XPath.
Po vytvoření nového projektu Rust s náklad nový příkaz, přidejte reqwest a škrabka bedny do sekce závislostí vašeho cargo.toml soubor:
[závislosti]
reqwest = {verze = "0.11", vlastnosti = ["blokování"]}
škrabka = "0.12.0"
budete používat reqwest na odesílat požadavky HTTP a škrabka pro analýzu.
Načítání webových stránek pomocí Reqwest
Před analýzou za účelem získání konkrétních dat odešlete požadavek na obsah webové stránky.
Můžete odeslat požadavek GET a načíst zdrojový kód HTML stránky pomocí text funkce na dostat funkce reqwest knihovna:
fnnačíst_html() -> Tětiva {
nechat odpověď = dostat(" https://news.ycombinator.com").unwrap().text().unwrap();
vrátit se Odezva;
}
The dostat funkce odešle požadavek na webovou stránku a text funkce vrací text HTML.
Analýza HTML pomocí škrabky
The načíst_html Funkce vrací text HTML a budete muset analyzovat text HTML, abyste získali konkrétní data, která potřebujete.
Scraper poskytuje funkce pro interakci s HTML v Html a Volič moduly. The Html modul poskytuje funkce pro analýzu dokumentu a Volič modul poskytuje funkce pro výběr konkrétních prvků z HTML.
Zde je návod, jak můžete načíst všechny tituly na stránce:
použití scraper::{Html, Selector};
fnhlavní() {
nechat odpověď = reqwest:: blocking:: get(
" https://news.ycombinator.com/").unwrap().text().unwrap();// analyzovat HTML dokument
nechat doc_body = Html:: parse_document(&response);
// vyberte prvky s třídou titleline
nechat title = Selector:: parse(".titleline").rozbalit();
pro titul v doc_body.select(&title) {
nechat titles = title.text().collect::<Vec<_>>();
println!("{}", tituly[0])
}
}
The parse_document funkce Html modul analyzuje text HTML a Analyzovat funkce Volič modul vybere prvky se zadaným selektorem CSS (v tomto případě titulek třída).
The pro smyčka prochází těmito prvky a vytiskne první blok textu z každého.
Zde je výsledek operace:
Výběr atributů pomocí škrabky
Chcete-li vybrat hodnotu atributu, načtěte požadované prvky jako dříve a použijte attr metoda instance hodnoty značky:
použití reqwest:: blocking:: get;
použití scraper::{Html, Selector};fnhlavní() {
nechat odpověď = dostat(" https://news.ycombinator.com").unwrap().text().unwrap();
nechat html_doc = Html:: parse_document(&response);
nechat class_selector = Selektor:: parse(".titleline").rozbalit();pro živel v html_doc.select(&class_selector) {
nechat link_selector = Selektor:: parse("A").rozbalit();
pro odkaz v element.select(&link_selector) {
-linechatNějaký(href) = link.value().attr("href") {
println!("{}", href);
}
}
}
}
Po výběru prvků pomocí titulek třídy pomocí rozebrat funkce, pro smyčka jimi prochází. Uvnitř smyčky se pak kód načte A označí a vybere href atribut s attr funkce.
The hlavní funkce vytiskne tyto odkazy s výsledkem, jako je tento:
Můžete vytvářet sofistikované webové aplikace v Rustu
Rust si v poslední době získává přijetí jako jazyk pro vývoj webu od front-endu až po vývoj aplikací na straně serveru.
Webové sestavení můžete využít k vytváření kompletních webových aplikací s knihovnami jako Yew a Percy nebo k vytváření na straně serveru aplikací s Actix, Rocket a řadou knihoven v ekosystému Rust, které poskytují funkce pro vytváření webových aplikací.