Un raschietto di immagini Python non è solo uno strumento per affinare le tue capacità di programmazione. Puoi anche usarlo per creare immagini per un progetto di apprendimento automatico o generare miniature di siti. Sebbene possano esserci altri modi per fare cose simili, niente può battere il controllo che hai usando gli strumenti che costruisci tu stesso.

Scopri come raschiare immagini da qualsiasi sito Web utilizzando Python e la libreria BeautifulSoup.

Il raschiamento delle immagini è legale?

Piace web scraping più generalizzato, lo scraping delle immagini è un metodo per scaricare il contenuto del sito Web. Non è illegale, ma ci sono alcune regole e best practice che dovresti seguire. Innanzitutto, dovresti evitare di eseguire lo scraping di un sito Web se afferma esplicitamente che non lo desidera. Puoi scoprirlo cercando a /robots.txt file sul sito di destinazione.

La maggior parte dei siti Web consente la scansione del Web perché desidera che i motori di ricerca indicizzino i propri contenuti. Puoi raschiare tali siti Web poiché le loro immagini sono disponibili pubblicamente.

instagram viewer

Tuttavia, solo perché puoi scaricare un'immagine, ciò non significa che puoi usarla come se fosse la tua. La maggior parte dei siti Web concede in licenza le proprie immagini per impedirti di ripubblicarle o riutilizzarle in altri modi. Presumi sempre che non puoi riutilizzare le immagini a meno che non vi sia un'esenzione specifica.

Configurazione del pacchetto Python

Avrai bisogno di installare alcuni pacchetti prima di iniziare. Se non hai Python installato sul tuo computer, visita il sito ufficiale python.org sito Web per scaricare e installare l'ultima versione.

Quindi, apri il tuo terminale nella cartella del tuo progetto e attivare un ambiente virtuale Python per isolare le tue dipendenze.

Infine, installa il richieste e Bella zuppa pacchetti usando pip:

pip install richieste bs4

Raschiamento di immagini con Python

Per questo tutorial sullo scraping delle immagini, utilizzerai il file richieste libreria per recuperare una pagina Web contenente le immagini di destinazione. Passerai quindi la risposta da quel sito Web a Bella zuppa da cui prelevare tutti gli indirizzi dei collegamenti alle immagini img tag. Scriverai quindi ogni file di immagine in una cartella per scaricare le immagini.

Come recuperare gli URL delle immagini con BeautifulSoup di Python

Ora vai avanti e crea un file Python nella cartella principale del tuo progetto. Assicurati di aggiungere il .py estensione al nome del file.

Ogni frammento di codice in questo tutorial continua dal precedente.

Apri il file Python con qualsiasi buon editor di codice e utilizzare il seguente codice per richiedere una pagina web:

importare richieste
URL = "imagesiteURL" # Sostituiscilo con l'URL del sito web
getURL = request.get (URL, headers={"User-Agent":"Mozilla/5.0"})
stampa (getURL.status_code)

Se il programma sopra emette un codice di risposta 200, la richiesta è andata a buon fine. Altrimenti, potresti voler assicurarti che la tua connessione di rete sia stabile. Inoltre, assicurati di aver fornito un URL valido.

Ora usa Bella zuppa di leggere il contenuto della pagina web con l'ausilio del analizzatore_html:

da bs4 importare Bella zuppa

zuppa = BeautifulSoup (getURL.text, 'html.parser')

immagini = zuppa.find_all('img')
stampa (immagini)

Questo codice crea un elenco di oggetti, ognuno dei quali rappresenta un'immagine dalla pagina web. Tuttavia, ciò di cui hai bisogno da questi dati è il testo di ciascuna immagine src attributo.

Per estrarre la fonte da ciascuno img etichetta:

Fonti immagine = []

per Immagine in immagini:
imageSources.append (image.get('src'))

stampa (Fonti immagine)

Esegui nuovamente il codice e gli indirizzi dell'immagine dovrebbero ora apparire in un nuovo elenco (imageSources). Hai estratto con successo ogni origine dell'immagine dalla pagina web di destinazione.

Come salvare le immagini con Python

Innanzitutto, crea una cartella di destinazione del download nella directory principale del tuo progetto e assegnagli un nome immagini.

Affinché Python scarichi correttamente le immagini, i loro percorsi devono essere URL assoluti completi. In altre parole, devono includere il " http://" o " https://" prefisso, più il dominio completo del sito web. Se la pagina web fa riferimento alle sue immagini utilizzando URL relativi, dovrai convertirle in URL assoluti.

Nel caso più semplice, quando l'URL è assoluto, l'avvio del download consiste solo nel richiedere ogni immagine dalle fonti estratte in precedenza:

per Immagine in Fonti immagine:
webs = request.get (immagine)
open('images/' + image.split('/')[-1], 'wb').write (webs.content)

Il image.split('/')[-1] la parola chiave divide il collegamento dell'immagine a ogni barra (/). Quindi recupera il nome del file immagine (inclusa qualsiasi estensione) dall'ultimo elemento.

Tieni presente che, in rari casi, i nomi dei file di immagine potrebbero entrare in conflitto, con conseguente sovrascrittura del download. Sentiti libero di esplorare le soluzioni a questo problema come estensione di questo esempio.

Gli URL assoluti possono diventare piuttosto complicati, con molti casi limite da coprire. Fortunatamente, c'è un metodo utile in richieste.comp pacchetto chiamato urljoin. Questo metodo restituisce un URL completo, dato un URL di base e un URL che può essere relativo. Ti consente di risolvere i valori in cui troverai href e src attributi.

Il codice finale si presenta così:

da bs4 importare Bella zuppa
URL = "imagesiteURL" # Sostituiscilo con l'URL del sito web
getURL = request.get (URL, headers={"User-Agent":"Mozilla/5.0"})
zuppa = BeautifulSoup (getURL.text, 'html.parser')

immagini = zuppa.find_all('img')
URL risolti = []

per Immagine in immagini:
src = image.get('src')
resolveURLs.append (requests.compat.urljoin (URL, src))

per Immagine in URL risolti:
webs = request.get (immagine)
open('images/' + image.split('/')[-1], 'wb').write (webs.content)

Non perdere mai i dati dell'immagine

Molti progetti di riconoscimento delle immagini hanno colpito un muro di mattoni a causa di una quantità inadeguata di immagini per addestrare un modello. Ma puoi sempre estrarre immagini dai siti Web per potenziare il tuo repository di dati. E per fortuna, Python è un potente raschietto di immagini che puoi usare continuamente senza il timore di avere un prezzo elevato.

Se sei interessato a recuperare altri tipi di dati dal web, potresti voler scoprire come usare Python per lo scraping web generale.