Strgalo za slike Python ni samo orodje za izostritev vaših programskih veščin. Uporabite ga lahko tudi za pridobivanje slik za projekt strojnega učenja ali ustvarjanje sličic spletnega mesta. Čeprav morda obstajajo drugi načini za izvajanje podobnih stvari, nič ne more premagati nadzora, ki ga imate z orodji, ki jih izdelate sami.
Naučite se strgati slike s katerega koli spletnega mesta s Pythonom in knjižnico BeautifulSoup.
Ali je brisanje slik zakonito?
Všeč mi je bolj posplošeno spletno strganje, strganje slik je metoda za prenos vsebine spletnega mesta. Ni nezakonito, vendar obstaja nekaj pravil in najboljših praks, ki jih morate upoštevati. Najprej se izogibajte strganju spletnega mesta, če je na njem izrecno navedeno, da tega ne želi. To lahko ugotovite tako, da poiščete a /robots.txt datoteko na ciljnem mestu.
Večina spletnih mest omogoča iskanje po spletu, ker želijo, da iskalniki indeksirajo njihovo vsebino. Takšna spletna mesta lahko posnamete, saj so njihove slike javno dostopne.
Vendar samo zato, ker lahko prenesete sliko, to ne pomeni, da jo lahko uporabljate, kot da bi bila vaša. Večina spletnih mest licencira svoje slike, da preprečite njihovo ponovno objavo ali ponovno uporabo na druge načine. Vedno predpostavljajte, da slik ne morete ponovno uporabiti, razen če obstaja posebna izjema.
Nastavitev paketa Python
Preden začnete, boste morali namestiti nekaj paketov. Če v računalniku nimate nameščenega Pythona, obiščite uradno python.org spletno mesto za prenos in namestitev najnovejše različice.
Nato odprite terminal v mapi projekta in aktivirati navidezno okolje Python da izolirate svoje odvisnosti.
Na koncu namestite zahteve in Lepa juha paketi, ki uporabljajo pip:
pip install bs4 zahteve
Strganje slik s Pythonom
Za to vadnico za strganje slik boste uporabili zahteve knjižnica, da pridobi spletno stran, ki vsebuje ciljne slike. Nato boste posredovali odgovor s tega spletnega mesta Lepa juha da zgrabite vse naslove povezav na slike img oznake. Nato boste vsako slikovno datoteko zapisali v mapo za prenos slik.
Kako pridobiti URL-je slik s Pythonovo BeautifulSoup
Zdaj pa ustvarite datoteko Python v korenski mapi vašega projekta. Prepričajte se, da ste dodali .py razširitev imena datoteke.
Vsak delček kode v tej vadnici se nadaljuje od prejšnjega.
Odprite datoteko Python z kateri koli dober urejevalnik kode in uporabite naslednjo kodo, da zahtevate spletno stran:
uvoz zahteve
URL = "imagesiteURL" # Zamenjajte to z URL-jem spletnega mesta
getURL = requests.get (URL, headers={"User-Agent":"Mozilla/5.0"})
natisni (getURL.status_code)
Če zgornji program izpiše odzivno kodo 200, je bila zahteva uspešna. V nasprotnem primeru boste morda želeli zagotoviti, da je vaša omrežna povezava stabilna. Prepričajte se tudi, da ste navedli veljaven URL.
Zdaj uporabite Lepa juha prebrati vsebino spletne strani s pomočjo html_razčlenjevalnik:
od bs4 uvoz Lepa juha
juha = BeautifulSoup (getURL.text, 'html.parser')
slike = soup.find_all('img')
tisk (slike)
Ta koda ustvari seznam predmetov, od katerih vsak predstavlja sliko s spletne strani. Vendar pa od teh podatkov potrebujete besedilo vsake slike src atribut.
Za izvlečenje vira iz vsakega img oznaka:
imageSources = []
za slika v slike:
imageSources.append (image.get('src'))
natisni (imageSources)
Ponovno zaženite kodo in naslovi slik bi se morali zdaj pojaviti na novem seznamu (slikovni viri). Vsak vir slik ste uspešno izvlekli iz ciljne spletne strani.
Kako shraniti slike s Pythonom
Najprej ustvarite ciljno mapo za prenos v korenskem imeniku projekta in jo poimenujte slike.
Da Python uspešno prenese slike, morajo biti njihove poti polni absolutni URL-ji. Z drugimi besedami, vključiti morajo " http://" ali " https://" predpono in celotno domeno spletnega mesta. Če se spletna stran sklicuje na svoje slike z uporabo relativnih URL-jev, jih boste morali pretvoriti v absolutne URL-je.
V preprostem primeru, ko je URL absolutni, je začetek prenosa le primer, ko zahtevate vsako sliko iz prej ekstrahiranih virov:
za slika v viri slike:
spleti = requests.get (slika)
open('images/' + image.split('/')[-1], 'wb').write (webs.content)
The image.split('/')[-1] ključna beseda razdeli povezavo do slike pri vsaki poševnici (/). Nato pridobi ime slikovne datoteke (vključno s katero koli pripono) iz zadnjega elementa.
Upoštevajte, da se lahko v redkih primerih imena slikovnih datotek spopadejo, kar povzroči prepis prenosa. Raziščite rešitve tega problema kot razširitev tega primera.
Absolutni URL-ji so lahko precej zapleteni, z veliko robnimi primeri. Na srečo obstaja uporabna metoda requests.compat paket imenovan urljoin. Ta metoda vrne polni URL, ki ima osnovni URL in URL, ki je lahko sorazmeren. Omogoča vam, da razrešite vrednosti, v katerih boste našli href in src lastnosti.
Končna koda izgleda takole:
od bs4 uvoz Lepa juha
URL = "imagesiteURL" # Zamenjajte to z URL-jem spletnega mesta
getURL = requests.get (URL, headers={"User-Agent":"Mozilla/5.0"})
juha = BeautifulSoup (getURL.text, 'html.parser')slike = soup.find_all('img')
resolvedURLs = []za slika v slike:
src = image.get('src')
resolvedURLs.append (requests.compat.urljoin (URL, src))
za slika v razrešeni URL-ji:
spleti = requests.get (slika)
open('images/' + image.split('/')[-1], 'wb').write (webs.content)
Nikoli ne zmanjkajte slikovnih podatkov
Številni projekti za prepoznavanje slik zadenejo opečno steno zaradi neustrezne količine slik za usposabljanje modela. Vedno pa lahko posnamete slike s spletnih mest, da povečate svoje skladišče podatkov. In na srečo je Python zmogljiv strgalnik slik, ki ga lahko uporabljate neprekinjeno, ne da bi se bali, da bi dobili ceno.
Če vas zanima pridobivanje drugih vrst podatkov iz spleta, boste morda želeli izvedeti, kako uporabljati Python za splošno spletno strganje.