Pythoni pildikaabits ei ole ainult programmeerimisoskuste teravdamise tööriist. Saate seda kasutada ka masinõppeprojekti piltide hankimiseks või saidi pisipiltide genereerimiseks. Ehkki sarnaste toimingute tegemiseks võib olla ka muid viise, ei saa miski ületada kontrolli, mis teil on enda loodud tööriistade abil.
Siit saate teada, kuidas Pythoni ja BeautifulSoupi teegi abil pilte mis tahes veebisaidilt kraapida.
Kas pildi kraapimine on seaduslik?
meeldib üldisem veebikraapimine, piltide kraapimine on meetod veebisaidi sisu allalaadimiseks. See ei ole ebaseaduslik, kuid järgige mõningaid reegleid ja parimaid tavasid. Esiteks peaksite vältima veebisaidi kraapimist, kui sellel on selgesõnaliselt öeldud, et ta ei soovi seda. Selle saate teada, kui otsite a /robots.txt faili sihtsaidil.
Enamik veebisaite lubab veebis roomamist, sest nad tahavad, et otsingumootorid nende sisu indekseeriksid. Saate selliseid veebisaite kraapida, kuna nende pildid on avalikult saadaval.
Kuid see, et saate pildi alla laadida, ei tähenda, et saaksite seda kasutada nii, nagu oleks see enda oma. Enamik veebisaite litsentsib oma pilte, et takistada teil neid uuesti avaldamast või muul viisil uuesti kasutamast. Eeldage alati, et te ei saa pilte uuesti kasutada, välja arvatud juhul, kui on olemas konkreetne erand.
Pythoni paketi seadistamine
Enne alustamist peate installima mõned paketid. Kui teie arvutisse pole Pythonit installitud, külastage ametlikku python.org uusima versiooni allalaadimiseks ja installimiseks.
Järgmisena avage terminal oma projekti kausta ja Pythoni virtuaalse keskkonna aktiveerimine oma sõltuvuste isoleerimiseks.
Lõpuks installige taotlusi ja Ilus supp paketid pipi abil:
pip install bs4 taotlused
Pildi kraapimine Pythoniga
Selle pildi kraapimise õpetuse jaoks kasutate taotlusi teeki sihtkujutisi sisaldava veebilehe toomiseks. Seejärel edastate vastuse sellelt veebisaidilt Ilus supp kõigi piltide linkide aadresside hankimiseks img sildid. Seejärel kirjutate iga pildifaili piltide allalaadimiseks kausta.
Piltide URL-ide toomine Pythoni BeautifulSoup'i abil
Nüüd jätkake ja looge oma projekti juurkausta Pythoni fail. Veenduge, et lisate .py failinime laiendust.
Iga selle õpetuse koodilõik jätkub eelmisest.
Avage Pythoni fail rakendusega mis tahes hea koodiredaktor ja kasutage veebilehe taotlemiseks järgmist koodi:
importida taotlusi
URL = "imagesiteURL" # Asendage see veebisaidi URL-iga
getURL = requests.get (URL, headers={"Kasutajaagent":"Mozilla/5.0"})
print (getURL.status_code)
Kui ülaltoodud programm väljastab vastusekoodi 200, oli taotlus edukas. Vastasel juhul võiksite tagada, et teie võrguühendus on stabiilne. Samuti veenduge, et oleksite sisestanud kehtiva URL-i.
Nüüd kasuta Ilus supp veebilehe sisu lugemiseks abiga html_parser:
alates bs4 importida Ilus supp
supp = BeautifulSoup (getURL.text, 'html.parser')
images = supp.find_all('img')
print (pildid)
See kood loob objektide loendi, millest igaüks esindab veebilehe pilti. Nende andmete põhjal vajate aga iga pildi teksti src atribuut.
Igast allikast eraldamiseks img silt:
pildiallikad = []
jaoks pilt sisse pildid:
imageSources.append (image.get('src'))
print (pildiallikad)
Käivitage kood uuesti ja piltide aadressid peaksid nüüd ilmuma uues loendis (pildiallikad). Olete edukalt eraldanud sihtveebilehelt iga pildiallika.
Kuidas Pythoniga pilte salvestada
Esiteks looge oma projekti juurkataloogis allalaadimise sihtkoha kaust ja nimetage see pilte.
Et Python saaks pilte edukalt alla laadida, peavad nende teed olema täielikud absoluutsed URL-id. Teisisõnu peavad need sisaldama " http://" või " https://" eesliide ja veebisaidi täielik domeen. Kui veebileht viitab oma piltidele suhteliste URL-ide abil, peate need teisendama absoluutseteks URL-ideks.
Lihtsamal juhul, kui URL on absoluutne, tähendab allalaadimise algatamine lihtsalt iga pildi taotlemist varasematest ekstraktitud allikatest:
jaoks pilt sisse pildiallikad:
webs = requests.get (pilt)
open('images/' + image.split('/')[-1], 'wb').kirjuta (webs.content)
The image.split('/')[-1] Märksõna poolitab pildilingi iga kaldkriipsu (/) juures. Seejärel otsib see viimasest elemendist pildifaili nime (sealhulgas mis tahes laiendi).
Pidage meeles, et harvadel juhtudel võivad pildifailide nimed kokku puutuda, mille tulemuseks on allalaadimiste ülekirjutamine. Uurige selle näite laiendusena selle probleemi lahendusi.
Absoluutsed URL-id võivad muutuda üsna keeruliseks, hõlmates palju äärejuhtumeid. Õnneks on selles kasulik meetod taotlused.compat pakk helistas urljoin. See meetod tagastab täieliku URL-i, võttes aluseks baas-URL-i ja URL-i, mis võivad olla suhtelised. See võimaldab teil leida väärtusi, millest leiate href ja src atribuudid.
Lõplik kood näeb välja selline:
alates bs4 importida Ilus supp
URL = "imagesiteURL" # Asendage see veebisaidi URL-iga
getURL = requests.get (URL, headers={"Kasutajaagent":"Mozilla/5.0"})
supp = BeautifulSoup (getURL.text, 'html.parser')images = supp.find_all('img')
lahendatud URL-id = []jaoks pilt sisse pildid:
src = image.get('src')
solvedURLs.append (requests.compat.urljoin (URL, src))
jaoks pilt sisse lahendatud URL-id:
webs = requests.get (pilt)
open('images/' + image.split('/')[-1], 'wb').kirjuta (webs.content)
Ärge kunagi jääge puudu pildiandmetest
Paljud pildituvastusprojektid põrkuvad vastu telliskiviseina, kuna modelli koolitamiseks pole piisavalt pilte. Andmehoidla täiustamiseks saate aga alati veebisaitidelt pilte kraapida. Ja õnneks on Python võimas pildikaabits, mida saate pidevalt kasutada, ilma et peaksite kartma, et hinnad lähevad alla.
Kui olete huvitatud muud tüüpi andmete toomisest veebist, võiksite uurida, kuidas Pythonit üldiseks veebikraapimiseks kasutada.