Python attēlu skrāpis nav tikai rīks programmēšanas prasmju uzlabošanai. Varat arī to izmantot, lai iegūtu attēlus mašīnmācīšanās projektam vai ģenerētu vietņu sīktēlus. Lai gan var būt arī citi veidi, kā veikt līdzīgas darbības, nekas nevar pārspēt kontroli, kas jums ir, izmantojot rīkus, ko izveidojat pats.

Uzziniet, kā iegūt attēlus no jebkuras vietnes, izmantojot Python un BeautifulSoup bibliotēku.

Vai attēlu nokasīšana ir likumīga?

Patīk vispārīgāka tīmekļa skrāpēšana, attēlu nokasīšana ir vietņu satura lejupielādes metode. Tas nav nelikumīgi, taču ir daži noteikumi un paraugprakse, kas jums jāievēro. Pirmkārt, jums vajadzētu izvairīties no vietnes nokasīšanas, ja tajā skaidri norādīts, ka jūs to nevēlaties. To var uzzināt, meklējot a /robots.txt failu mērķa vietnē.

Lielākā daļa vietņu atļauj tīmekļa pārmeklēšanu, jo tās vēlas, lai meklētājprogrammas indeksētu to saturu. Šādas vietnes varat nokasīt, jo to attēli ir publiski pieejami.

Tomēr tas, ka varat lejupielādēt attēlu, nenozīmē, ka varat to izmantot tā, it kā tas būtu savējais. Lielākā daļa vietņu licencē savus attēlus, lai novērstu to pārpublicēšanu vai atkārtotu izmantošanu citos veidos. Vienmēr pieņem, ka attēlus nevar izmantot atkārtoti, ja vien nav noteikts īpašs izņēmums.

Python pakotnes iestatīšana

Pirms darba sākšanas jums būs jāinstalē dažas pakotnes. Ja jūsu datorā nav instalēts Python, apmeklējiet oficiālo vietni python.org vietne, lai lejupielādētu un instalētu jaunāko versiju.

Pēc tam atveriet savu termināli projekta mapei un aktivizēt Python virtuālo vidi lai izolētu savas atkarības.

Visbeidzot instalējiet pieprasījumus un Skaista zupa pakotnes, izmantojot pip:

pip instalēšanas bs4 pieprasījumi

Attēlu nokasīšana ar Python

Šai attēlu skrāpēšanas apmācībai izmantosit pieprasījumus bibliotēku, lai ielādētu tīmekļa lapu, kurā ir mērķa attēli. Pēc tam jūs nosūtīsit atbildi no šīs vietnes uz Skaista zupa lai paņemtu visas attēlu saišu adreses no img tagus. Pēc tam katrs attēla fails tiks ierakstīts mapē, lai lejupielādētu attēlus.

Kā iegūt attēlu URL, izmantojot Python's BeautifulSoup

Tagad turpiniet un izveidojiet Python failu sava projekta saknes mapē. Pārliecinieties, ka esat pievienojis .py faila nosaukuma paplašinājumu.

Katrs koda fragments šajā apmācībā turpinās no iepriekšējās.

Atveriet Python failu ar jebkurš labs koda redaktors un izmantojiet šo kodu, lai pieprasītu tīmekļa lapu:

imports pieprasījumus
URL = "imagesiteURL" # Aizstājiet to ar vietnes URL
getURL = requests.get (URL, headers={"User-Agent":"Mozilla/5.0"})
drukāt (getURL.status_code)

Ja iepriekš minētā programma izvada atbildes kodu 200, pieprasījums bija veiksmīgs. Pretējā gadījumā, iespējams, vēlēsities nodrošināt, lai tīkla savienojums būtu stabils. Pārliecinieties arī, vai esat norādījis derīgu URL.

Tagad izmantojiet Skaista zupa lai lasītu tīmekļa lapas saturu, izmantojot html_parser:

no bs4 imports Skaista zupa

zupa = BeautifulSoup (getURL.text, "html.parser")

attēli = zupa.find_all('img')
drukāt (attēli)

Šis kods izveido objektu sarakstu, katrs attēlo attēlu no tīmekļa lapas. Tomēr no šiem datiem jums ir nepieciešams katra attēla teksts src atribūts.

Lai iegūtu avotu no katra img tags:

imageSources = []

priekš attēlu iekšā attēli:
imageSources.append (image.get('src'))

drukāt (attēlu avoti)

Atkārtoti palaidiet kodu, un attēlu adresēm tagad vajadzētu parādīties jaunā sarakstā (attēlu avoti). Jūs esat veiksmīgi izvilcis katru attēla avotu no mērķa tīmekļa lapas.

Kā saglabāt attēlus, izmantojot Python

Vispirms izveidojiet lejupielādes mērķa mapi sava projekta saknes direktorijā un nosauciet to attēlus.

Lai Python varētu veiksmīgi lejupielādēt attēlus, to ceļiem ir jābūt pilniem absolūtajiem URL. Citiem vārdiem sakot, tajos ir jāiekļauj " http://" vai " https://" prefiksu, kā arī pilnu vietnes domēnu. Ja tīmekļa lapa atsaucas uz attēliem, izmantojot relatīvos vietrāžus URL, tie ir jāpārvērš par absolūtajiem URL.

Vienkāršā gadījumā, ja URL ir absolūts, lejupielādes sākšana ir tikai gadījums, kad katrs attēls tiek pieprasīts no iepriekš iegūtajiem avotiem:

priekš attēlu iekšā attēlu avoti:
webs = requests.get (attēls)
open('images/' + image.split('/')[-1], 'wb').write (webs.content)

The image.split('/')[-1] atslēgvārds sadala attēla saiti pie katras slīpsvītras (/). Pēc tam tas izgūst attēla faila nosaukumu (ieskaitot jebkuru paplašinājumu) no pēdējā elementa.

Ņemiet vērā, ka retos gadījumos attēlu failu nosaukumi var nesakrist, kā rezultātā lejupielāde tiek pārrakstīta. Jūtieties brīvi izpētīt šīs problēmas risinājumus kā šī piemēra paplašinājumu.

Absolūtie vietrāži URL var kļūt diezgan sarežģīti, jo ir nepieciešams aptvert daudz malas gadījumu. Par laimi, tajā ir noderīga metode pieprasījumi.compat paka sauc urljoin. Šī metode atgriež pilnu URL, ņemot vērā pamata URL un URL, kas var būt relatīvs. Tas ļauj jums atrisināt vērtības, kuras jūs atradīsit href un src atribūti.

Galīgais kods izskatās šādi:

no bs4 imports Skaista zupa
URL = "imagesiteURL" # Aizstājiet to ar vietnes URL
getURL = requests.get (URL, headers={"User-Agent":"Mozilla/5.0"})
zupa = BeautifulSoup (getURL.text, "html.parser")

attēli = zupa.find_all('img')
atrisinātie URL = []

priekš attēlu iekšā attēli:
src = image.get('src')
solvedURLs.append (requests.compat.urljoin (URL, src))

priekš attēlu iekšā atrisinātie URL:
webs = requests.get (attēls)
open('images/' + image.split('/')[-1], 'wb').write (webs.content)

Nekad nepietrūkst attēla datu

Daudzi attēlu atpazīšanas projekti atduras pret ķieģeļu sienu, jo nav pietiekami daudz attēlu, lai apmācītu modeli. Bet jūs vienmēr varat nokasīt attēlus no vietnēm, lai uzlabotu savu datu krātuvi. Un, par laimi, Python ir jaudīgs attēlu skrāpis, ko varat izmantot nepārtraukti, nebaidoties no cenas samazināšanas.

Ja jūs interesē cita veida datu iegūšana no tīmekļa, iespējams, vēlēsities uzzināt, kā izmantot Python vispārējai tīmekļa kopēšanai.