Når en API bare ikke vil skære den, kan du altid ty til at skrabe HTML, og Rust kan hjælpe dig.

Webskrabning er en populær teknik til at indsamle store mængder data fra websider hurtigt og effektivt. I mangel af en API kan web-skrabning være den næstbedste tilgang.

Rusts hastighed og hukommelsessikkerhed gør sproget ideelt til at bygge webskrabere. Rust er hjemsted for mange kraftfulde parsing- og dataekstraktionsbiblioteker, og dens robuste fejlhåndteringsfunktioner er praktiske til effektiv og pålidelig webdataindsamling.

Webskrabning i rust

Mange populære biblioteker understøtter web-skrabning i Rust, herunder reqwest, skraber, Vælg, og html5 nogensinde. De fleste Rust-udviklere kombinerer funktionalitet fra reqwest og scraper til deres web-skrabning.

Reqwest-biblioteket giver funktionalitet til at lave HTTP-anmodninger til webservere. Reqwest er bygget på Rusts indbyggede hyper kasse, mens du leverer en API på højt niveau til standard HTTP-funktioner.

Scraper er et kraftfuldt web-skrabebibliotek, der analyserer HTML- og XML-dokumenter og

instagram viewer
udtrækker data ved hjælp af CSS-vælgere og XPath-udtryk.

Efter at have oprettet et nyt Rust-projekt med last ny kommando, tilføj reqwest og skraber kasser til afhængighedsafsnittet i din cargo.toml fil:

[afhængigheder]
reqwest = {version = "0.11", funktioner = ["blokering"]}
skraber = "0.12.0"

du vil bruge reqwest til sende HTTP-anmodninger og skraber til parsing.

Hentning af websider med Reqwest

Du sender en anmodning om en websides indhold, før du analyserer den for at hente specifikke data.

Du kan sende en GET-anmodning og hente HTML-kilden til en side ved hjælp af tekst funktion på funktion af reqwest bibliotek:

fnretrieve_html() -> Snor {
lade svar = få(" https://news.ycombinator.com").unwrap().text().unwrap();
Vend tilbage respons;
}

Det funktionen sender anmodningen til websiden, og tekst funktion returnerer teksten i HTML.

Parsing HTML med Scraper

Det retrieve_html funktionen returnerer HTML-teksten, og du bliver nødt til at parse HTML-teksten for at hente de specifikke data, du har brug for.

Scraper giver funktionalitet til at interagere med HTML i Html og Vælger moduler. Det Html modul giver funktionalitet til at parse dokumentet, og Vælger modul giver funktionalitet til at vælge specifikke elementer fra HTML.

Sådan kan du hente alle titlerne på en side:

brug scraper::{Html, Selector};

fnvigtigste() {
lade respons = reqwest:: blokering:: get(
" https://news.ycombinator.com/").unwrap().text().unwrap();

// parse HTML-dokumentet
lade doc_body = Html:: parse_document(&response);

// vælg elementerne med titellinjeklassen
lade title = Selector:: parse(".titleline").unwrap();

til titel i doc_body.select(&title) {
lade titles = title.text().collect::<Vec<_>>();
println!("{}", titler[0])
}
}

Det parse_dokument funktion af Html modul analyserer HTML-teksten, og Parse funktion af Vælger modul vælger elementerne med den angivne CSS-vælger (i dette tilfælde titellinje klasse).

Det til loop gennemløber disse elementer og udskriver den første tekstblok fra hver.

Her er resultatet af operationen:

Valg af attributter med skraber

For at vælge en attributværdi skal du hente de nødvendige elementer som før og bruge attr metode for tagværdiforekomsten:

brug reqwest:: blokering:: get;
brug scraper::{Html, Selector};

fnvigtigste() {
lade svar = få(" https://news.ycombinator.com").unwrap().text().unwrap();
lade html_doc = Html:: parse_document(&response);
lade class_selector = Selector:: parse(".titleline").unwrap();

til element i html_doc.select(&class_selector) {
lade link_selector = Selector:: parse("en").unwrap();

til link i element.select(&link_selector) {
hvisladeNogle(href) = link.value().attr("href") {
println!("{}", href);
}
}
}
}

Efter at have valgt elementer med titellinje klasse ved hjælp af parse funktion, den til løkke krydser dem. Inde i løkken henter koden så -en mærker og vælger href attribut med attr fungere.

Det vigtigste funktion udskriver disse links, med et resultat som dette:

Du kan bygge sofistikerede webapplikationer i Rust

For nylig er Rust blevet vedtaget som et sprog til webudvikling fra front-end til server-side app-udvikling.

Du kan udnytte web-assembly til at bygge full-stack webapplikationer med biblioteker som Yew og Percy eller bygge server-side applikationer med Actix, Rocket og værten af ​​biblioteker i Rust-økosystemet, der giver funktionalitet til at bygge web applikationer.