Python-kuvakaavin ei ole vain työkalu ohjelmointitaitojen terävöittämiseen. Voit käyttää sitä myös kuvien hankkimiseen koneoppimisprojektiin tai sivuston pikkukuvien luomiseen. Vaikka voi olla muitakin tapoja tehdä samanlaisia ​​asioita, mikään ei voita hallintaa, joka sinulla on itse rakentamillasi työkaluilla.

Opi kaappaamaan kuvia mistä tahansa verkkosivustosta Pythonin ja BeautifulSoup-kirjaston avulla.

Onko kuvien kaapiminen laillista?

Kuten yleisempi verkon kaapiminen, kuvankaappaus on tapa ladata verkkosivuston sisältöä. Se ei ole laitonta, mutta joitain sääntöjä ja parhaita käytäntöjä sinun tulee noudattaa. Ensinnäkin sinun tulee välttää verkkosivuston kaappaamista, jos se nimenomaisesti ilmoittaa, ettei se halua sinun tekevän niin. Voit selvittää tämän etsimällä a /robots.txt tiedosto kohdesivustolla.

Useimmat verkkosivustot sallivat verkkoindeksoinnin, koska ne haluavat hakukoneiden indeksoivan niiden sisällön. Voit kaapata tällaisia ​​verkkosivustoja, koska niiden kuvat ovat julkisesti saatavilla.

instagram viewer

Se, että voit ladata kuvan, ei kuitenkaan tarkoita, että voit käyttää sitä ikään kuin se olisi omaasi. Useimmat verkkosivustot lisensoivat kuviaan estääkseen sinua julkaisemasta niitä uudelleen tai käyttämästä niitä uudelleen muilla tavoilla. Oletetaan aina, että et voi käyttää kuvia uudelleen, ellei ole erityistä poikkeusta.

Python-paketin asetukset

Sinun on asennettava muutama paketti ennen kuin aloitat. Jos tietokoneellesi ei ole asennettu Pythonia, käy virallisessa osoitteessa python.org Web-sivusto, jossa voit ladata ja asentaa uusimman version.

Avaa seuraavaksi terminaali projektikansioosi ja aktivoi Python-virtuaaliympäristö eristääksesi riippuvuutesi.

Asenna lopuksi pyynnöt ja Kaunis keitto paketit pip: llä:

pip install bs4 -pyynnöt

Kuvan kaapiminen Pythonilla

Tässä kuvien kaavinta-opetusohjelmassa käytät pyynnöt kirjasto noutaaksesi kohdekuvat sisältävän verkkosivun. Välität sitten vastauksen kyseiseltä verkkosivustolta osoitteeseen Kaunis keitto nappaaksesi kaikki kuvalinkkien osoitteet img tunnisteet. Kirjoita sitten jokainen kuvatiedosto kansioon kuvien lataamista varten.

Kuvien URL-osoitteiden hakeminen Python's BeautifulSoupilla

Mene nyt eteenpäin ja luo Python-tiedosto projektisi juurikansioon. Varmista, että liität .py tiedostonimen laajennus.

Jokainen tämän opetusohjelman koodinpätkä jatkaa edellisestä.

Avaa Python-tiedosto sovelluksella mikä tahansa hyvä koodieditori ja käytä seuraavaa koodia verkkosivun pyytämiseen:

tuonti pyynnöt
URL = "imagesiteURL" # Korvaa tämä verkkosivuston URL-osoitteella
getURL = requests.get (URL, headers={"User-Agent":"Mozilla/5.0"})
tulosta (getURL.status_code)

Jos yllä oleva ohjelma antaa 200 vastauskoodin, pyyntö onnistui. Muussa tapauksessa saatat haluta varmistaa, että verkkoyhteytesi on vakaa. Varmista myös, että olet antanut kelvollisen URL-osoitteen.

Nyt käytä Kaunis keitto lukeaksesi web-sivun sisältöä -sovelluksen avulla html_parser:

alkaen bs4 tuonti Kaunis keitto

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

images = soup.find_all('img')
tulostaa (kuvat)

Tämä koodi luo luettelon objekteista, joista jokainen edustaa Web-sivun kuvaa. Kuitenkin, mitä tarvitset näistä tiedoista, on kunkin kuvan teksti src attribuutti.

Poimimaan lähteen jokaisesta img tag:

imageSources = []

varten kuva sisään kuvat:
imageSources.append (image.get('src'))

tulosta (kuvalähteet)

Suorita koodi uudelleen, ja kuvien osoitteiden pitäisi nyt näkyä uudessa luettelossa (imageSources). Olet onnistuneesti purkanut jokaisen kuvalähteen kohdeverkkosivulta.

Kuinka tallentaa kuvat Pythonilla

Luo ensin latauskohdekansio projektisi juurihakemistoon ja nimeä se kuvia.

Jotta Python voi ladata kuvat onnistuneesti, niiden polkujen on oltava täydellisiä absoluuttisia URL-osoitteita. Toisin sanoen niiden on sisällettävä " http://" tai " https://" etuliite sekä verkkosivuston koko verkkotunnus. Jos verkkosivu viittaa kuviinsa käyttämällä suhteellisia URL-osoitteita, sinun on muunnettava ne absoluuttisiksi URL-osoitteiksi.

Helpoimmassa tapauksessa, kun URL-osoite on absoluuttinen, latauksen aloittaminen edellyttää vain jokaisen kuvan pyytämistä aikaisemmista poimituista lähteistä:

varten kuva sisään kuvalähteet:
webs = requests.get (kuva)
open('images/' + image.split('/')[-1], 'wb').kirjoita (webs.content)

The image.split('/')[-1] avainsana jakaa kuvalinkin jokaisen vinoviivan (/) kohdalta. Sitten se hakee kuvatiedoston nimen (mukaan lukien mahdollinen pääte) viimeisestä elementistä.

Muista, että harvoissa tapauksissa kuvatiedostojen nimet voivat olla ristiriidassa, mikä johtaa latausten päällekirjoittamiseen. Voit vapaasti tutkia ratkaisuja tähän ongelmaan tämän esimerkin jatkeena.

Absoluuttiset URL-osoitteet voivat olla melko monimutkaisia, ja niissä on paljon reunatapauksia. Onneksi siinä on hyödyllinen menetelmä requests.compat paketti soi urljoin. Tämä menetelmä palauttaa täydellisen URL-osoitteen, joka antaa perus-URL-osoitteen ja URL-osoitteen, joka voi olla suhteellinen. Sen avulla voit ratkaista arvoja, joista löydät href ja src attribuutteja.

Lopullinen koodi näyttää tältä:

alkaen bs4 tuonti Kaunis keitto
URL = "imagesiteURL" # Korvaa tämä verkkosivuston URL-osoitteella
getURL = requests.get (URL, headers={"User-Agent":"Mozilla/5.0"})
keitto = BeautifulSoup (getURL.text, 'html.parser')

images = soup.find_all('img')
ratkaistut URL-osoitteet = []

varten kuva sisään kuvat:
src = image.get('src')
solvedURLs.append (requests.compat.urljoin (URL, src))

varten kuva sisään ratkaistut URL-osoitteet:
webs = requests.get (kuva)
open('images/' + image.split('/')[-1], 'wb').kirjoita (webs.content)

Älä koskaan jää vähäiseksi kuvadatasta

Monet kuvantunnistusprojektit osuvat tiiliseinään, koska mallin kouluttamiseen ei ole riittävästi kuvia. Mutta voit aina kaapata kuvia verkkosivustoilta parantaaksesi tietovarastoasi. Ja onneksi Python on tehokas kuvankaavin, jota voit käyttää jatkuvasti ilman pelkoa hinnoittelusta.

Jos olet kiinnostunut hakemaan muun tyyppistä tietoa verkosta, saatat haluta selvittää, kuinka Pythonia käytetään yleiseen web-kaappaukseen.