Το web scraping, γνωστό και ως εξαγωγή δεδομένων ιστού, είναι μια αυτοματοποιημένη μέθοδος εξαγωγής δεδομένων ή περιεχομένου από ιστοσελίδες.
Οι ξύστρες Ιστού αυτοματοποιούν την εξαγωγή δεδομένων χωρίς ανθρώπινη παρέμβαση. Ένα scraper έχει πρόσβαση σε μια ιστοσελίδα στέλνοντας αιτήματα HTTP, όπως κάνει ένα πρόγραμμα περιήγησης ιστού. Ωστόσο, αντί να εμφανίζει το HTML που ανακτά, το επεξεργάζεται σύμφωνα με τις οδηγίες σας και αποθηκεύει το αποτέλεσμα.
Τα web scrapers είναι χρήσιμα για την ανάκτηση δεδομένων από ιστότοπους που δεν παρέχουν API. Είναι δημοφιλείς σε τομείς όπως η επιστήμη δεδομένων, η ασφάλεια στον κυβερνοχώρο, το frontend και η ανάπτυξη backend.
Web Scraping in Go
Στο Go, υπάρχουν διάφορα πακέτα απόξεσης ιστού. Τα δημοφιλή περιλαμβάνουν το goquery, το Colly και το ChromeDP.
Το ChromeDP είναι ένα πακέτο προγραμμάτων οδήγησης ιστού που μοιάζει με σελήνιο. Υποστηρίζει το πρωτόκολλο εργαλείων προγραμματιστή του Chrome στο Go χωρίς εξαρτήσεις.
Το Colly είναι μια βιβλιοθήκη ειδική για την απόξεση ιστού που δημιουργήθηκε με χρήση goquery. Αλλά το goquery είναι η πιο γρήγορη επιλογή για την απόξεση ιστοτόπων στο Go.
Τι είναι το goquery;
Η βιβλιοθήκη CSS, jQuery, βοήθησε στην έμπνευση goquery. Είναι μια βιβλιοθήκη Go που βασίζεται στο net/html πακέτο, το οποίο υλοποιεί ένα tokenizer και αναλυτή συμβατό με HTML5. Χρησιμοποιεί επίσης το πακέτο Cascadia, το οποίο υλοποιεί επιλογείς CSS για χρήση με τον αναλυτή που παρέχεται από το net/html.
Εγκατάσταση goquery
Εκτελέστε την παρακάτω εντολή στο τερματικό σας για να εγκαταστήσετε το goquery. Εάν αντιμετωπίσετε σφάλματα, δοκιμάστε να ενημερώσετε την έκδοση Go.
πηγαίνω λάβετε το github.com/PuerkitoBio/goquery
Η Διαδικασία απόξεσης Ιστού
Μπορείτε να χωρίσετε τη συνολική διαδικασία απόξεσης σε τρεις μικρότερες εργασίες:
- Υποβολή αιτημάτων HTTP.
- Χρήση επιλογέων και εντοπιστών για να λάβετε τα απαιτούμενα δεδομένα.
- Αποθήκευση δεδομένων σε βάση δεδομένων ή δομές δεδομένων για περαιτέρω επεξεργασία.
Υποβολή αιτημάτων HTTP στο Go
Μπορείτε να στείλετε αιτήματα HTTP χρησιμοποιώντας το net/http πακέτο, που περιλαμβάνει η τυπική βιβλιοθήκη Go.
πακέτο κύριος
εισαγωγή "net/http"
εισαγωγή "κούτσουρο"
εισαγωγή "fmt"funcκύριος() {
webUrl := "https://news.ycombinator.com/"
απάντηση, err:= http. Λήψη (webUrl)
αν λάθος != μηδέν {
κούτσουρο. Fatalln (λάθος)
} αλλούαν απάντηση. Κωδικός Κατάστασης == 200 {
fmt. Println ("Μπορούμε να το ξύσουμε αυτό")
} αλλού {
κούτσουρο. Fatalln ("Μην το ξύνεις αυτό")
}
}
http. Παίρνω επιστρέφει ένα σώμα απόκρισης και ένα σφάλμα. απάντηση. Κωδικός Κατάστασης είναι ο κωδικός κατάστασης αίτησης-απόκρισης.
Κατά την υποβολή αιτημάτων HTTP, εάν το κωδικός κατάστασης απάντησης είναι 200 μπορείτε να προχωρήσετε στην απόξεση του ιστότοπου.
Λήψη των απαιτούμενων δεδομένων με χρήση goquery
Λήψη του HTML ιστότοπου
Πρώτα, πρέπει να αναλύσετε το απλό HTML από την απάντηση (ανταπόκριση.σώμα) για να λάβετε ένα πλήρες αντικείμενο εγγράφου που αντιπροσωπεύει την ιστοσελίδα:
έγγραφο, λάθη := goquery. NewDocumentFromReader (απάντηση. Σώμα)
αν λάθος != μηδέν {
κούτσουρο. Fatalln (λάθος)
}
Τώρα μπορείτε να χρησιμοποιήσετε το αντικείμενο εγγράφου για να αποκτήσετε πρόσβαση στη δομή και το περιεχόμενο που περιέχει η ιστοσελίδα.
Επιλογή απαιτούμενων στοιχείων από το HTML
Θα χρειαστεί να επιθεωρήσετε την ιστοσελίδα για να ελέγξετε τη δομή των δεδομένων που πρέπει να εξαγάγετε. Αυτό θα σας βοηθήσει να δημιουργήσετε έναν επιλογέα για πρόσβαση σε αυτόν.
Χρησιμοποιώντας επιλογείς και εντοπιστές, μπορείτε να εξαγάγετε το HTML που χρειάζεστε χρησιμοποιώντας το Εύρημα μέθοδος του αντικειμένου εγγράφου.
ο Εύρημα Η μέθοδος παίρνει έναν επιλογέα CSS για να εντοπίσει το στοιχείο που περιέχει τα δεδομένα που χρειάζεστε:
έγγραφο. Εύρεση ("tr.athing")
Ο παραπάνω κώδικας επιστρέφει μόνο το πρώτο στοιχείο HTML που ταιριάζει με τον επιλογέα ή μια κενή λίστα εάν δεν υπήρχε καθόλου αντιστοίχιση.
Επιλογή πολλαπλών στοιχείων από HTML
Τις περισσότερες φορές, θα θέλετε να ανακτήσετε όλα τα στοιχεία HTML που ταιριάζουν με τον επιλογέα σας.
Μπορείτε να επιλέξετε όλα τα στοιχεία που ταιριάζουν στο HTML χρησιμοποιώντας το Καθε μέθοδος της τιμής που Εύρημα() επιστρέφει. ο Καθε Η μέθοδος παίρνει μια συνάρτηση με δύο παραμέτρους: έναν δείκτη και έναν επιλογέα τύπου *goquery. Επιλογή.
έγγραφο. Find("tr.athing").Κάθε(func(δείκτης ενθ, επιλογέας *goquery. Επιλογή) {
/* Επιλογέας διαδικασίας εδώ */
})
Στο σώμα της συνάρτησης, μπορείτε να επιλέξετε τα συγκεκριμένα δεδομένα που θέλετε από το HTML. Σε αυτήν την περίπτωση, χρειάζεστε τους συνδέσμους και τους τίτλους κάθε ανάρτησης που παραθέτει η σελίδα. Χρησιμοποιήστε το Εύρημα μέθοδος της παραμέτρου επιλογέα για να περιορίσετε το σύνολο των στοιχείων και να εξαγάγετε τιμές κειμένου ή χαρακτηριστικών.
έγγραφο. Find("tr.athing").Κάθε(func(δείκτης ενθ, επιλογέας *goquery. Επιλογή) {
τίτλος := επιλογέας. Find("td.title").Text()
σύνδεσμος, βρέθηκε := επιλογέας. Find("a.titlelink").Attr("href")
})
Ο παραπάνω κωδικός καλεί το Κείμενο μέθοδος του αποτελέσματος από εκλέκτορας. Εύρημα για να εξαγάγετε τα περιεχόμενα ενός κελιού πίνακα. Η επιλογή χαρακτηριστικών—όπως διευθύνσεις URL συνδέσμων και εικόνων—απαιτεί τη χρήση του Attr μέθοδος. Αυτή η μέθοδος επιστρέφει επίσης μια τιμή που υποδεικνύει εάν το χαρακτηριστικό υπάρχει καθόλου.
Η διαδικασία είναι η ίδια για την επιλογή οποιωνδήποτε στοιχείων και χαρακτηριστικών από μια ιστοσελίδα.
ο Εύρημα Η μέθοδος είναι πολύ ισχυρή, επιτρέποντας σε ένα ευρύ φάσμα λειτουργιών για την επιλογή και τον εντοπισμό στοιχείων HTML. Μπορείτε να τα εξερευνήσετε στην τεκμηρίωση του goquery.
Αποθήκευση των δεδομένων απόξεσης
Το χαρακτηριστικό link και ο τίτλος είναι συμβολοσειρές που μπορείτε να αντιστοιχίσετε σε μεταβλητές. Σε πραγματικά σενάρια, θα αποθηκεύσετε σε μια βάση δεδομένων ή μια δομή δεδομένων για χειρισμό. Συχνά, αρκεί μια απλή προσαρμοσμένη κατασκευή.
Δημιουργήστε μια δομή με πεδία τίτλος και σύνδεσμος και ένα κομμάτι structs για να κρατήσει τον τύπο struct.
τύπος Πληροφορίες struct {
Σύνδεσμος σειρά
τίτλος σειρά
}
πληροφορίες := φτιαχνω, κανω([]Πληροφορίες, 0)
Αφού δημιουργήσετε τη δομή και το slice, στο σώμα της συνάρτησης μεθόδου εγγράφου, συμπληρώστε το τμήμα της συνάρτησης που μεταφέρετε στη μέθοδο Εύρεση. Χρησιμοποιήστε τον τύπο struct για να δημιουργήσετε νέες δομές δεδομένων, καθεμία από τις οποίες περιέχει ένα αποτέλεσμα.
πληροφορία = προσαρτώ(πληροφορίες, πληροφορίες{
τίτλος: τίτλος,
σύνδεσμος: σύνδεσμος,
})
Αυτό προσθέτει τύπους Πληροφορίες(το struct) στο πληροφορίες(το slice) από το οποίο μπορείτε να χειριστείτε τα δεδομένα όπως θέλετε.
Η εκτύπωση της φέτας δείχνει ότι έχετε ξύσει με επιτυχία τον ιστότοπο και συμπληρώσατε το κομμάτι.
fmt. Println (πληροφορίες)
Είναι λογικό να αποθηκεύσετε τα αποκομμένα δεδομένα σε μια τοπική κρυφή μνήμη, ώστε να μην χτυπήσετε τον διακομιστή της ιστοσελίδας περισσότερο από όσο χρειάζεται. Αυτό όχι μόνο θα μειώσει την επισκεψιμότητα αλλά θα επιταχύνει την εφαρμογή σας, καθώς είναι πιο γρήγορη η ανάκτηση τοπικών δεδομένων παρά η υποβολή αιτημάτων και η απόξεση ιστοτόπων.
Υπάρχουν πολλά πακέτα βάσεων δεδομένων στο Go που θα μπορούσατε να χρησιμοποιήσετε για να αποθηκεύσετε τα δεδομένα. ο βάση δεδομένων/sql Το πακέτο υποστηρίζει βάσεις δεδομένων SQL. Υπάρχουν επίσης προγράμματα-πελάτες βάσης δεδομένων NoSQL όπως το Πρόγραμμα οδήγησης MongoDB Goκαι βάσεις δεδομένων χωρίς διακομιστή όπως το FaunaDB χρησιμοποιώντας το Πρόγραμμα οδήγησης faunaDB.
Η ουσία του Web Scraping in Go
Εάν προσπαθείτε να αφαιρέσετε δεδομένα από έναν ιστότοπο, το goquery είναι ένα εξαιρετικό μέρος για να ξεκινήσετε. Αλλά είναι ένα ισχυρό πακέτο που μπορεί να κάνει περισσότερα από απλή απόξεση ιστού. Μπορείτε να μάθετε περισσότερα για τη λειτουργικότητά του στην επίσημη τεκμηρίωση του έργου.
Η απόξεση Ιστού είναι μια σημαντική δεξιότητα σε διάφορα τεχνολογικά πεδία και θα είναι χρήσιμη σε πολλά από τα έργα σας.
Πώς να εφαρμόσετε αντικειμενοστρεφείς έννοιες προγραμματισμού στο Go
Διαβάστε Επόμενο
Σχετικά θέματα
- Προγραμματισμός
- Ανάπτυξη διαδικτύου
- Προγραμματισμός
Σχετικά με τον Συγγραφέα

Ο Goodness είναι τεχνικός συγγραφέας, προγραμματιστής backend και αναλυτής δεδομένων, που απλοποιεί διάφορα θέματα τεχνολογίας καθώς εξερευνά αυτό το συναρπαστικό πεδίο.
Εγγραφείτε στο ενημερωτικό μας δελτίο
Εγγραφείτε στο ενημερωτικό μας δελτίο για συμβουλές τεχνολογίας, κριτικές, δωρεάν ebook και αποκλειστικές προσφορές!
Κάντε κλικ εδώ για να εγγραφείτε