Όταν ένα API απλά δεν το κόβει, μπορείτε πάντα να καταφύγετε σε απόξεση HTML και το Rust μπορεί να σας βοηθήσει.

Το web scraping είναι μια δημοφιλής τεχνική για τη συλλογή μεγάλων ποσοτήτων δεδομένων από ιστοσελίδες γρήγορα και αποτελεσματικά. Ελλείψει API, το web scraping μπορεί να είναι η επόμενη καλύτερη προσέγγιση.

Η ταχύτητα του Rust και η ασφάλεια της μνήμης καθιστούν τη γλώσσα ιδανική για την κατασκευή ξύστρων ιστού. Το Rust φιλοξενεί πολλές ισχυρές βιβλιοθήκες ανάλυσης και εξαγωγής δεδομένων και οι ισχυρές του δυνατότητες διαχείρισης σφαλμάτων είναι χρήσιμες για αποτελεσματική και αξιόπιστη συλλογή δεδομένων ιστού.

Web Scraping σε Rust

Πολλές δημοφιλείς βιβλιοθήκες υποστηρίζουν την απόξεση ιστού στο Rust, μεταξύ των οποίων reqwest, ξύστρα, επιλέγω, και html5ever. Οι περισσότεροι προγραμματιστές Rust συνδυάζουν λειτουργικότητα από το reqwest και το scraper για την απόξεση ιστού τους.

Η βιβλιοθήκη reqwest παρέχει λειτουργικότητα για την υποβολή αιτημάτων HTTP σε διακομιστές ιστού. Το Reqwest είναι χτισμένο στο ενσωματωμένο του Rust

instagram viewer
υπερπληθωρισμός crate ενώ παρέχει ένα API υψηλού επιπέδου για τυπικές λειτουργίες HTTP.

Το Scraper είναι μια ισχυρή βιβλιοθήκη απόξεσης ιστού που αναλύει έγγραφα HTML και XML και εξάγει δεδομένα χρησιμοποιώντας επιλογείς CSS και εκφράσεις XPath.

Μετά τη δημιουργία ενός νέου έργου Rust με το φορτίο καινούργιο εντολή, προσθέστε το reqwest και ξύστρα κιβώτια στην ενότητα εξαρτήσεων του σας φορτίο.toml αρχείο:

[εξαρτήσεις]
reqwest = {έκδοση = "0.11", χαρακτηριστικά = ["μπλοκάρισμα"]}
ξύστρα = "0.12.0"

θα χρησιμοποιήσετε reqwest προς την αποστολή αιτημάτων HTTP και ξύστρα για ανάλυση.

Ανάκτηση ιστοσελίδων με Reqwest

Θα στείλετε ένα αίτημα για τα περιεχόμενα μιας ιστοσελίδας πριν την αναλύσετε για να ανακτήσετε συγκεκριμένα δεδομένα.

Μπορείτε να στείλετε ένα αίτημα GET και να ανακτήσετε την πηγή HTML μιας σελίδας χρησιμοποιώντας το κείμενο λειτουργία στο παίρνω λειτουργία του reqwest βιβλιοθήκη:

στretrieve_html() -> Σειρά {
αφήνω απάντηση = παίρνω(" https://news.ycombinator.com").unwrap().text().unwrap();
ΕΠΙΣΤΡΟΦΗ απάντηση;
}

ο παίρνω η λειτουργία στέλνει το αίτημα στην ιστοσελίδα και το κείμενο Η συνάρτηση επιστρέφει το κείμενο του HTML.

Ανάλυση HTML με Scraper

ο retrieve_html Η συνάρτηση επιστρέφει το κείμενο του HTML και θα χρειαστεί να αναλύσετε το κείμενο HTML για να ανακτήσετε τα συγκεκριμένα δεδομένα που χρειάζεστε.

Το Scraper παρέχει λειτουργικότητα για αλληλεπίδραση με HTML στο Html και Εκλέκτορας ενότητες. ο Html Η ενότητα παρέχει λειτουργικότητα για την ανάλυση του εγγράφου και το Εκλέκτορας Η ενότητα παρέχει λειτουργικότητα για την επιλογή συγκεκριμένων στοιχείων από την HTML.

Δείτε πώς μπορείτε να ανακτήσετε όλους τους τίτλους σε μια σελίδα:

χρήση scraper::{Html, Selector};

στκύριος() {
αφήνω απάντηση = reqwest:: αποκλεισμός:: λήψη(
" https://news.ycombinator.com/").unwrap().text().unwrap();

// αναλύστε το έγγραφο HTML
αφήνω doc_body = Html:: parse_document(&response);

// επιλέξτε τα στοιχεία με κλάση γραμμής τίτλου
αφήνω τίτλος = Επιλογέας:: ανάλυση(".titleline").ξεδιπλώνω();

Για τίτλος σε doc_body.select(&title) {
αφήνω titles = title.text().collect::<Vec<_>>();
println!("{}", τίτλοι[0])
}
}

ο parse_document λειτουργία του Html Η ενότητα αναλύει το κείμενο HTML και το Αναλύω λέξη λειτουργία του Εκλέκτορας Η ενότητα επιλέγει τα στοιχεία με τον καθορισμένο επιλογέα CSS (σε αυτήν την περίπτωση, το γραμμή τίτλου τάξη).

ο Για Ο βρόχος διασχίζει αυτά τα στοιχεία και εκτυπώνει το πρώτο μπλοκ κειμένου από το καθένα.

Ιδού το αποτέλεσμα της επέμβασης:

Επιλογή χαρακτηριστικών με Scraper

Για να επιλέξετε μια τιμή χαρακτηριστικού, ανακτήστε τα απαιτούμενα στοιχεία όπως πριν και χρησιμοποιήστε το attr μέθοδος της παρουσίας τιμής ετικέτας:

χρήση reqwest:: blocking:: get;
χρήση scraper::{Html, Selector};

στκύριος() {
αφήνω απάντηση = παίρνω(" https://news.ycombinator.com").unwrap().text().unwrap();
αφήνω html_doc = Html:: parse_document(&response);
αφήνω class_selector = Selector:: parse(".titleline").ξεδιπλώνω();

Για στοιχείο σε html_doc.select(&class_selector) {
αφήνω link_selector = Selector:: parse("ένα").ξεδιπλώνω();

Για Σύνδεσμος σε element.select(&link_selector) {
αναφήνωΜερικοί(href) = link.value().attr("href") {
println!("{}", href);
}
}
}
}

Αφού επιλέξετε στοιχεία με το γραμμή τίτλου τάξη χρησιμοποιώντας το αναλύω λέξη λειτουργία, η Για βρόχος τα διασχίζει. Μέσα στον βρόχο, ο κωδικός ανακτάται στη συνέχεια ένα ετικέτες και επιλέγει το href χαρακτηριστικό με το attr λειτουργία.

ο κύριος Η λειτουργία εκτυπώνει αυτούς τους συνδέσμους, με αποτέλεσμα όπως αυτό:

Μπορείτε να δημιουργήσετε εξελιγμένες εφαρμογές Ιστού στο Rust

Πρόσφατα, η Rust έχει υιοθετηθεί ως γλώσσα για την ανάπτυξη ιστού από το front-end μέχρι την ανάπτυξη εφαρμογών από την πλευρά του διακομιστή.

Μπορείτε να αξιοποιήσετε τη συναρμολόγηση ιστού για να δημιουργήσετε εφαρμογές web πλήρους στοίβας με βιβλιοθήκες όπως οι Yew και Percy ή να δημιουργήσετε από την πλευρά του διακομιστή εφαρμογές με Actix, Rocket και τον πλήθος βιβλιοθηκών στο οικοσύστημα Rust που παρέχουν λειτουργικότητα για τη δημιουργία ιστού εφαρμογές.