Als een API het gewoon niet doet, kun je altijd je toevlucht nemen tot het schrapen van HTML, en Rust kan je helpen.
Webscraping is een populaire techniek om snel en efficiënt grote hoeveelheden gegevens van webpagina's te verzamelen. Bij afwezigheid van een API kan webschrapen de volgende beste aanpak zijn.
De snelheid en geheugenveiligheid van Rust maken de taal ideaal voor het bouwen van webschrapers. Rust is de thuisbasis van vele krachtige parsing- en gegevensextractiebibliotheken, en de robuuste foutafhandelingsmogelijkheden zijn handig voor het efficiënt en betrouwbaar verzamelen van webgegevens.
Webschrapen in roest
Veel populaire bibliotheken ondersteunen webscraping in Rust, waaronder verzoek, schraper, selecteren, En html5ooit. De meeste Rust-ontwikkelaars combineren functionaliteit van reqwest en scraper voor hun webscraping.
De reqwest-bibliotheek biedt functionaliteit voor het maken van HTTP-verzoeken aan webservers. Reqwest is gebouwd op Rust's ingebouwde hyper krat terwijl het een API op hoog niveau levert voor standaard HTTP-functies.
Scraper is een krachtige webscraping-bibliotheek die HTML- en XML-documenten parseert en extraheert gegevens met behulp van CSS-kiezers en XPath-expressies.
Na het maken van een nieuw Rust-project met de lading nieuw commando, voeg de verzoek En schraper kratten naar het gedeelte afhankelijkheden van uw vracht.toml bestand:
[afhankelijkheden]
verzoek = {versie = "0.11", kenmerken = ["blokkeren"]}
schraper = "0.12.0"
Je zult gebruiken verzoek naar HTTP-verzoeken verzenden En schraper voor het ontleden.
Webpagina's ophalen met Reqwest
U stuurt een verzoek om de inhoud van een webpagina voordat u deze analyseert om specifieke gegevens op te halen.
U kunt een GET-verzoek verzenden en de HTML-broncode van een pagina ophalen met behulp van de tekst functie op de krijgen functie van de verzoek bibliotheek:
fnophalen_html() -> Snaar {
laten antwoord = krijgen(" https://news.ycombinator.com").uitpakken().tekst().uitpakken();
opbrengst antwoord;
}
De krijgen functie stuurt het verzoek naar de webpagina, en de tekst functie retourneert de tekst van de HTML.
HTML parseren met Scraper
De ophalen_html functie retourneert de tekst van de HTML en u moet de HTML-tekst ontleden om de specifieke gegevens op te halen die u nodig hebt.
Scraper biedt functionaliteit voor interactie met HTML in de Html En kiezer modules. De Html module biedt functionaliteit voor het ontleden van het document, en de kiezer module biedt functionaliteit voor het selecteren van specifieke elementen uit de HTML.
Zo kunt u alle titels op een pagina ophalen:
gebruik scraper::{Html, Selector};
fnvoornaamst() {
laten antwoord = verzoek:: blokkeren:: get(
" https://news.ycombinator.com/").uitpakken().tekst().uitpakken();// ontleden het HTML-document
laten doc_body = Html:: parse_document(&antwoord);
// selecteer de elementen met titellijnklasse
laten titel = Selector:: ontleden(".titelregel").uitpakken();
voor titel in doc_body.select(&titel) {
laten titels = titel.tekst().collect::<Vec<_>>();
println!("{}", titels[0])
}
}
De ontleed_document functie van de Html module ontleedt de HTML-tekst en de Ontleed functie van de kiezer module selecteert de elementen met de opgegeven CSS-kiezer (in dit geval de titelregel klas).
De voor lus doorloopt deze elementen en drukt het eerste tekstblok van elk af.
Dit is het resultaat van de operatie:
Attributen selecteren met Scraper
Om een attribuutwaarde te selecteren, haalt u de vereiste elementen op zoals voorheen en gebruikt u de atr methode van de tagwaarde-instantie:
gebruik verzoek:: blokkeren:: krijgen;
gebruik scraper::{Html, Selector};fnvoornaamst() {
laten antwoord = krijgen(" https://news.ycombinator.com").uitpakken().tekst().uitpakken();
laten html_doc = Html:: parse_document(&antwoord);
laten class_selector = Selector:: ontleden(".titelregel").uitpakken();voor element in html_doc.select(&class_selector) {
laten link_selector = Selector:: ontleden("A").uitpakken();
voor koppeling in element.select(&link_selector) {
alslatenSommige(href) = link.waarde().attr("href") {
println!("{}", href);
}
}
}
}
Na het selecteren van elementen met de titelregel klas met behulp van de ontleed functie, de voor lus doorkruist ze. Binnen de lus wordt de code vervolgens opgehaald A tags en selecteert de href attribuut met de atr functie.
De voornaamst functie drukt deze links af, met een resultaat zoals dit:
U kunt geavanceerde webapplicaties bouwen in Rust
Onlangs is Rust steeds populairder geworden als taal voor webontwikkeling, van front-end tot server-side app-ontwikkeling.
U kunt webassemblage gebruiken om full-stack webapplicaties te bouwen met bibliotheken zoals Yew en Percy of server-side te bouwen applicaties met Actix, Rocket en de vele bibliotheken in het Rust-ecosysteem die functionaliteit bieden voor het bouwen van internet toepassingen.