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

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

Επισκόπηση των μεθόδων συλλογής δεδομένων

Υπάρχουν διαφορετικές μέθοδοι συλλογής δεδομένων. Περιλαμβάνουν μη αυτόματη εισαγωγή δεδομένων, API, δημόσια σύνολα δεδομένων και απόξεση ιστού. Κάθε μέθοδος έχει τα πλεονεκτήματα και τους περιορισμούς της.

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

instagram viewer

Τα API επιτρέπουν στους προγραμματιστές να έχουν πρόσβαση και να ανακτούν δεδομένα με δομημένο τρόπο. Συχνά παρέχουν πληροφορίες σε πραγματικό χρόνο ή ενημερώνονται τακτικά. Ωστόσο, η πρόσβαση στο API μπορεί να είναι περιορισμένη, να απαιτεί έλεγχο ταυτότητας ή να έχει περιορισμούς χρήσης.

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

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

Επιλογή Web Scraping για συλλογή δεδομένων

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

Προσδιορισμός της πηγής δεδομένων

Το πρώτο βήμα στην απόξεση ιστού είναι η αναγνώριση της πηγής δεδομένων. Αυτός είναι ο ιστότοπος που περιέχει τα δεδομένα που θέλετε να ξύσετε. Όταν επιλέγετε την πηγή δεδομένων, βεβαιωθείτε ότι έχετε ευθυγραμμιστεί με τους όρους παροχής υπηρεσιών της πηγής. Αυτό το άρθρο θα χρησιμοποιεί το IMDb (Internet Movie Database) ως πηγή δεδομένων.

Ρύθμιση του περιβάλλοντος σας

Ρυθμίστε ένα εικονικό περιβάλλον. Στη συνέχεια, εκτελέστε την ακόλουθη εντολή για να εγκαταστήσετε τις απαιτούμενες βιβλιοθήκες.

αιτήματα εγκατάστασης pip beautifulsoup4 pandas

Θα χρησιμοποιήσετε το αιτήσεων βιβλιοθήκη για την υποβολή αιτημάτων HTTP. όμορφη σούπα4 για ανάλυση περιεχομένου HTML και εξαγωγή δεδομένων από ιστοσελίδες. Τέλος, θα χρησιμοποιήσετε τα πάντα για το χειρισμό και την ανάλυση δεδομένων.

Ο πλήρης πηγαίος κώδικας είναι διαθέσιμος σε α Αποθετήριο GitHub.

Σύνταξη του σεναρίου απόξεσης Ιστού

Εισαγάγετε τις εγκατεστημένες βιβλιοθήκες στο σενάριο σας για να μπορείτε να χρησιμοποιήσετε τις λειτουργίες που παρέχουν.

εισαγωγή αιτήσεων
από bs4 εισαγωγή Όμορφη Σούπα
εισαγωγή χρόνος
εισαγωγή τα πάντα όπως και πδ
εισαγωγή σχετικά με

ο χρόνος και σχετικά με Οι ενότητες αποτελούν μέρος της τυπικής βιβλιοθήκης Python. Ως εκ τούτου, δεν απαιτούνται ξεχωριστές εγκαταστάσεις.

χρόνος θα προσθέσει καθυστερήσεις στη διαδικασία απόξεσης ενώ σχετικά με θα ασχοληθεί με κανονικές εκφράσεις.

Εσύ θα χρησιμοποιήστε το Beautiful Soup για να ξύσετε τον ιστότοπο-στόχο.

Δημιουργήστε μια συνάρτηση που θα στείλει ένα αίτημα HTTP GET στη διεύθυνση URL-στόχου σας. Στη συνέχεια θα πρέπει να ανακτήσει το περιεχόμενο της απάντησης και να δημιουργήσει ένα Όμορφη Σούπα αντικείμενο από το περιεχόμενο HTML.

defπάρε_σούπα(url, params=Καμία, κεφαλίδες=Καμία):
answer = requests.get (url, params=params, headers=headers)
σούπα = BeautifulSoup (response.content, "html.parser")
ΕΠΙΣΤΡΟΦΗ σούπα

Το επόμενο βήμα είναι η εξαγωγή πληροφοριών από το Όμορφη Σούπα αντικείμενο.

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

Στη συνέχεια, κάντε δεξί κλικ στην ιστοσελίδα και επιλέξτε Ελέγχω από το μενού περιβάλλοντος. Αυτό θα ανοίξει τα εργαλεία προγραμματιστών του προγράμματος περιήγησης.

Στον κώδικα HTML της ιστοσελίδας, αναζητήστε στοιχεία που περιέχουν τα δεδομένα που θέλετε να ξύσετε. Δώστε προσοχή στις ετικέτες HTML, τις κλάσεις και τα χαρακτηριστικά που σχετίζονται με τα δεδομένα που χρειάζεστε. Θα τα χρησιμοποιήσετε για να δημιουργήσετε επιλογείς για την εξαγωγή των δεδομένων χρησιμοποιώντας το BeautifulSoup. Στο παραπάνω στιγμιότυπο οθόνης μπορείτε να δείτε ότι ο τίτλος της ταινίας βρίσκεται μέσα στο list-item-header τάξη. Επιθεωρήστε κάθε χαρακτηριστικό που θέλετε να εξαγάγετε.

Δημιουργήστε μια συνάρτηση που θα εξάγει πληροφορίες από το Όμορφη Σούπα αντικείμενο. Σε αυτήν την περίπτωση, η συνάρτηση βρίσκει τον τίτλο, τη βαθμολογία, την περιγραφή, το είδος, την ημερομηνία κυκλοφορίας, τους σκηνοθέτες και τα αστέρια της ταινίας χρησιμοποιώντας κατάλληλες ετικέτες HTML και χαρακτηριστικά κλάσης.

defεξαγωγή_ταινιών_δεδομένων(ταινία):
τίτλος = movie.find("h3", class_="lister-item-header").εύρημα("ένα").κείμενο
βαθμολογία = movie.find("div", class_="ratings-imdb-rating").ισχυρό.κείμενο
περιγραφή = movie.find("div", class_="lister-item-content").find_all("Π")[1].text.strip()
genre_element = movie.find("σπιθαμή", class_="είδος")
genre = genre_element.text.strip() αν είδος_στοιχείου αλλούΚανένας
release_date = movie.find("σπιθαμή", class_="lister-item-year text-muted unbold").text.strip()
Director_stars = movie.find("Π", class_="Σίγαση κειμένου").find_all("ένα")
διευθυντές = [πρόσωπο.κείμενο Για πρόσωπο σε Director_stars[:-1]]
αστέρια = [πρόσωπο.κείμενο Για πρόσωπο σε σκηνοθέτης_αστέρια[-1:]]
ταινία_δεδομένα = {
"Τίτλος": τίτλος,
"Εκτίμηση": εκτίμηση,
"Περιγραφή": περιγραφή,
"Είδος": είδος,
"Ημερομηνία κυκλοφορίας": ημερομηνία κυκλοφορίας,
"Σκηνοθέτες": σκηνοθέτες,
"αστέρια": αστέρια
}
ΕΠΙΣΤΡΟΦΗ ταινία_δεδομένα

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

defscrape_imdb_movies(έτος, όριο):
βάση_url = " https://www.imdb.com/search/title"
κεφαλίδες = {"Αποδοχή-Γλώσσα": "en-US, en; q=0,9"}
ταινίες = []
έναρξη = 1
ενώ len (ταινίες) < όριο:
παραμέτρους = {
"ημερομηνία κυκλοφορίας": έτος,
"είδος": "αριθμός_ψήφων, περιγραφή",
"αρχή": έναρξη
}
σούπα = get_soup (base_url, params=params, headers=headers)
movie_list = soup.find_all("div", class_="κατάλογος-αντικείμενο-λειτουργία για προχωρημένους")
αν len (λίστα_ταινιών) == 0:
Διακοπή
Για ταινία σε movie_list:
movie_data = extract_movie_data (ταινία)
movies.append (movie_data)
αν len (ταινίες) >= όριο:
Διακοπή
έναρξη += 50# Το IMDb εμφανίζει 50 ταινίες ανά σελίδα
ώρα. ύπνος(1) # Προσθέστε μια καθυστέρηση για να αποφύγετε την υπερένταση του διακομιστή
ΕΠΙΣΤΡΟΦΗ κινηματογράφος

Στη συνέχεια καλέστε το ορίστε scrape_imdb_movies να κάνει το ξύσιμο.

# Scrape 1000 ταινίες που κυκλοφόρησαν το 2023 (ή όσες είναι διαθέσιμες)
ταινίες = scrape_imdb_movies(2023, 1000)

Τώρα έχετε αφαιρέσει δεδομένα.

Το επόμενο βήμα είναι να δημιουργήσετε ένα σύνολο δεδομένων από αυτά τα δεδομένα.

Δημιουργία συνόλου δεδομένων από τα αποκομμένα δεδομένα

Δημιουργήστε ένα DataFrame χρησιμοποιώντας Pandas από τα αποξεσμένα δεδομένα.

df = πδ. DataFrame (ταινίες)

Στη συνέχεια, κάντε προεπεξεργασία και καθαρισμό δεδομένων. Σε αυτήν την περίπτωση, αφαιρέστε σειρές με τιμές που λείπουν. Στη συνέχεια, εξαγάγετε το έτος από την ημερομηνία κυκλοφορίας και μετατρέψτε το σε αριθμητικό. Αφαιρέστε τις περιττές στήλες. Μετατρέψτε το Εκτίμηση στήλη σε αριθμητικό. Τέλος, αφαιρέστε μη αλφαβητικούς χαρακτήρες από το Τίτλος στήλη.

df = df.dropna()
df['Έτος κυκλοφορίας'] = df['Ημερομηνία κυκλοφορίας'].str.extract(r'(\d{4})')
df['Έτος κυκλοφορίας'] = pd.to_numeric (df['Έτος κυκλοφορίας'],
λάθη='αναγκάζω').atype('Int64')
df = df.drop(['Ημερομηνία κυκλοφορίας'], άξονας=1)
df['Εκτίμηση'] = pd.to_numeric (df['Εκτίμηση'], σφάλματα='αναγκάζω')
df['Τίτλος'] = df['Τίτλος'].ισχύουν(λάμδα x: re.sub(r'\W+', ' ', Χ))

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

df.to_csv("imdb_movies_dataset.csv", ευρετήριο=Ψευδής)

Τέλος, εκτυπώστε τις πέντε πρώτες σειρές του συνόλου δεδομένων σας για να δείτε πώς φαίνεται.

df.head()

Η έξοδος είναι όπως φαίνεται στο παρακάτω στιγμιότυπο οθόνης:

Τώρα έχετε ένα σύνολο δεδομένων που λαμβάνεται μέσω της απόξεσης ιστού.

Web Scraping με χρήση άλλων βιβλιοθηκών Python

Το Beautiful Soup δεν είναι η μόνη βιβλιοθήκη Python που μπορείτε να χρησιμοποιήσετε για απόξεση ιστού. Υπάρχουν κι άλλες βιβλιοθήκες εκεί έξω. Το καθένα με τα δικά του πλεονεκτήματα και περιορισμούς. Ερευνήστε τα για να μάθετε ποιο ταιριάζει καλύτερα στην περίπτωση χρήσης σας.