Ένα ξύστρα εικόνων Python δεν είναι απλώς ένα εργαλείο για την ενίσχυση των δεξιοτήτων προγραμματισμού σας. Μπορείτε επίσης να το χρησιμοποιήσετε για την προέλευση εικόνων για ένα έργο μηχανικής εκμάθησης ή για τη δημιουργία μικρογραφιών ιστοτόπων. Αν και μπορεί να υπάρχουν άλλοι τρόποι για να κάνετε παρόμοια πράγματα, τίποτα δεν μπορεί να νικήσει τον έλεγχο που έχετε χρησιμοποιώντας εργαλεία που κατασκευάζετε μόνοι σας.
Μάθετε πώς να ξύνετε εικόνες από οποιονδήποτε ιστότοπο χρησιμοποιώντας Python και τη βιβλιοθήκη BeautifulSoup.
Είναι νόμιμη η απόξεση εικόνων;
Σαν πιο γενικευμένη απόξεση ιστού, η απόξεση εικόνας είναι μια μέθοδος για τη λήψη περιεχομένου ιστότοπου. Δεν είναι παράνομο, αλλά υπάρχουν ορισμένοι κανόνες και βέλτιστες πρακτικές που πρέπει να ακολουθήσετε. Πρώτον, θα πρέπει να αποφύγετε το ξύσιμο ενός ιστότοπου εάν δηλώνει ρητά ότι δεν το θέλει. Μπορείτε να το μάθετε ψάχνοντας για ένα /robots.txt αρχείο στον ιστότοπο προορισμού.
Οι περισσότεροι ιστότοποι επιτρέπουν την ανίχνευση ιστού επειδή θέλουν οι μηχανές αναζήτησης να ευρετηριάσουν το περιεχόμενό τους. Μπορείτε να ξύσετε τέτοιους ιστότοπους, καθώς οι εικόνες τους είναι διαθέσιμες στο κοινό.
Ωστόσο, μόνο και μόνο επειδή μπορείτε να κάνετε λήψη μιας εικόνας, αυτό δεν σημαίνει ότι μπορείτε να τη χρησιμοποιήσετε σαν να ήταν δική σας. Οι περισσότεροι ιστότοποι αδειοδοτούν τις εικόνες τους για να σας εμποδίσουν να τις αναδημοσιεύσετε ή να τις επαναχρησιμοποιήσετε με άλλους τρόπους. Πάντα να υποθέτετε ότι δεν μπορείτε να επαναχρησιμοποιήσετε εικόνες εκτός εάν υπάρχει συγκεκριμένη εξαίρεση.
Ρύθμιση πακέτου Python
Θα χρειαστεί να εγκαταστήσετε μερικά πακέτα πριν ξεκινήσετε. Εάν δεν έχετε εγκαταστήσει την Python στον υπολογιστή σας, επισκεφτείτε την επίσημη σελίδα python.org ιστοσελίδα για λήψη και εγκατάσταση της πιο πρόσφατης έκδοσης.
Στη συνέχεια, ανοίξτε το τερματικό σας στο φάκελο του έργου σας και ενεργοποίηση εικονικού περιβάλλοντος Python για να απομονώσεις τις εξαρτήσεις σου.
Τέλος, εγκαταστήστε το αιτήσεων και Όμορφη Σούπα πακέτα που χρησιμοποιούν pip:
pip εγκατάσταση bs4 αιτήματα
Ξύσιμο εικόνας με Python
Για αυτό το σεμινάριο απόξεσης εικόνας, θα χρησιμοποιήσετε το αιτήσεων βιβλιοθήκη για λήψη μιας ιστοσελίδας που περιέχει τις εικόνες-στόχους. Στη συνέχεια, θα μεταβιβάσετε την απάντηση από αυτόν τον ιστότοπο Όμορφη Σούπα για να πάρετε όλες τις διευθύνσεις συνδέσμων εικόνας από img ετικέτες. Στη συνέχεια, θα γράψετε κάθε αρχείο εικόνας σε έναν φάκελο για να κάνετε λήψη των εικόνων.
Πώς να λάβετε διευθύνσεις URL εικόνων με το BeautifulSoup της Python
Τώρα προχωρήστε και δημιουργήστε ένα αρχείο Python στον ριζικό φάκελο του έργου σας. Βεβαιωθείτε ότι έχετε προσαρτήσει το .py επέκταση στο όνομα αρχείου.
Κάθε απόσπασμα κώδικα σε αυτό το σεμινάριο συνεχίζεται από το προηγούμενο.
Ανοίξτε το αρχείο Python με οποιοδήποτε καλό πρόγραμμα επεξεργασίας κώδικα και χρησιμοποιήστε τον ακόλουθο κώδικα για να ζητήσετε μια ιστοσελίδα:
εισαγωγή αιτήσεων
URL = "imagesiteURL" # Αντικαταστήστε το με τη διεύθυνση URL του ιστότοπου
getURL = requests.get (URL, headers={"User-Agent":"Mozilla/5.0"})
εκτύπωση (getURL.status_code)
Εάν το παραπάνω πρόγραμμα εξάγει έναν κωδικό απόκρισης 200, το αίτημα ήταν επιτυχές. Διαφορετικά, μπορεί να θέλετε να βεβαιωθείτε ότι η σύνδεση δικτύου σας είναι σταθερή. Επίσης, βεβαιωθείτε ότι έχετε παράσχει μια έγκυρη διεύθυνση URL.
Τώρα χρησιμοποιήστε Όμορφη Σούπα για να διαβάσετε το περιεχόμενο της ιστοσελίδας με τη βοήθεια του html_parser:
από bs4 εισαγωγή Όμορφη Σούπα
σούπα = BeautifulSoup (getURL.text, 'html.parser')
εικόνες = soup.find_all('img')
εκτύπωση (εικόνες)
Αυτός ο κώδικας δημιουργεί μια λίστα αντικειμένων, καθένα από τα οποία αντιπροσωπεύει μια εικόνα από την ιστοσελίδα. Ωστόσο, αυτό που χρειάζεστε από αυτά τα δεδομένα είναι το κείμενο κάθε εικόνας src Χαρακτηριστικό.
Για να εξαγάγετε την πηγή από το καθένα img ετικέτα:
Πηγές εικόνας = []
Για εικόνα σε εικόνες:
imageSources.append (image.get('src'))
εκτύπωση (imageSources)
Εκτελέστε ξανά τον κώδικά σας και οι διευθύνσεις εικόνων θα πρέπει τώρα να εμφανίζονται σε μια νέα λίστα (Πηγές εικόνας). Έχετε εξαγάγει με επιτυχία κάθε πηγή εικόνας από την ιστοσελίδα προορισμού.
Πώς να αποθηκεύσετε τις εικόνες με την Python
Αρχικά, δημιουργήστε έναν φάκελο προορισμού λήψης στον ριζικό κατάλογο του έργου σας και ονομάστε τον εικόνες.
Για να μπορέσει η Python να κατεβάσει με επιτυχία τις εικόνες, οι διαδρομές τους πρέπει να είναι πλήρεις απόλυτες διευθύνσεις URL. Με άλλα λόγια, πρέπει να περιλαμβάνουν το " http://" ή " https://" πρόθεμα, συν τον πλήρη τομέα του ιστότοπου. Εάν η ιστοσελίδα αναφέρεται στις εικόνες της χρησιμοποιώντας σχετικές διευθύνσεις URL, θα πρέπει να τις μετατρέψετε σε απόλυτες διευθύνσεις URL.
Στην εύκολη περίπτωση, όταν η διεύθυνση URL είναι απόλυτη, η έναρξη της λήψης είναι απλώς μια περίπτωση αίτησης κάθε εικόνας από τις προηγούμενες πηγές που έχουν εξαχθεί:
Για εικόνα σε Πηγές εικόνας:
webs = requests.get (εικόνα)
open('images/' + image.split('/')[-1], 'wb').write (webs.content)
ο image.split('/')[-1] λέξη-κλειδί χωρίζει τη σύνδεση εικόνας σε κάθε κάθετο προς τα εμπρός (/). Στη συνέχεια, ανακτά το όνομα αρχείου εικόνας (συμπεριλαμβανομένης οποιασδήποτε επέκτασης) από το τελευταίο στοιχείο.
Λάβετε υπόψη ότι, σε σπάνιες περιπτώσεις, τα ονόματα αρχείων εικόνας ενδέχεται να έρχονται σε σύγκρουση, με αποτέλεσμα την αντικατάσταση των λήψεων. Μη διστάσετε να εξερευνήσετε λύσεις σε αυτό το πρόβλημα ως επέκταση αυτού του παραδείγματος.
Οι απόλυτες διευθύνσεις URL μπορεί να γίνουν αρκετά περίπλοκες, με πολλές ακραίες περιπτώσεις να καλύψουν. Ευτυχώς, υπάρχει μια χρήσιμη μέθοδος στο αιτήματα.compat κάλεσε το πακέτο urljoin. Αυτή η μέθοδος επιστρέφει μια πλήρη διεύθυνση URL, με τη βασική διεύθυνση URL και μια διεύθυνση URL που μπορεί να είναι σχετική. Σας επιτρέπει να επιλύσετε τιμές που θα βρείτε href και src γνωρίσματα.
Ο τελικός κώδικας μοιάζει με αυτό:
από bs4 εισαγωγή Όμορφη Σούπα
URL = "imagesiteURL" # Αντικαταστήστε το με τη διεύθυνση URL του ιστότοπου
getURL = requests.get (URL, headers={"User-Agent":"Mozilla/5.0"})
σούπα = BeautifulSoup (getURL.text, 'html.parser')εικόνες = soup.find_all('img')
solvedURLs = []Για εικόνα σε εικόνες:
src = image.get('src')
solvedURLs.append (requests.compat.urljoin (URL, src))
Για εικόνα σε solvedURLs:
webs = requests.get (εικόνα)
open('images/' + image.split('/')[-1], 'wb').write (webs.content)
Ποτέ να μην υπάρχουν δεδομένα εικόνας
Πολλά έργα αναγνώρισης εικόνων χτυπούν έναν τοίχο από τούβλα λόγω του ανεπαρκούς αριθμού εικόνων για την εκπαίδευση ενός μοντέλου. Αλλά μπορείτε πάντα να ξύσετε εικόνες από ιστότοπους για να ενισχύσετε το αποθετήριο δεδομένων σας. Και ευτυχώς, η Python είναι ένα ισχυρό scraper εικόνας που μπορείτε να χρησιμοποιείτε συνεχώς χωρίς να φοβάστε ότι θα εξαντληθείτε.
Εάν ενδιαφέρεστε να λάβετε άλλους τύπους δεδομένων από τον Ιστό, ίσως θέλετε να μάθετε πώς να χρησιμοποιείτε την Python για γενική απόξεση ιστού.