Un răzuitor de imagini Python nu este doar un instrument pentru a vă îmbunătăți abilitățile de programare. De asemenea, îl puteți folosi pentru a genera imagini pentru un proiect de învățare automată sau pentru a genera miniaturi de site. Deși pot exista și alte modalități de a face lucruri similare, nimic nu poate învinge controlul pe care îl aveți folosind instrumentele pe care le construiți singur.
Aflați cum să răzuiți imagini de pe orice site web folosind Python și biblioteca BeautifulSoup.
Este legală răzuirea imaginii?
Ca web scraping mai generalizat, scrapingul imaginilor este o metodă de descărcare a conținutului site-ului web. Nu este ilegal, dar există câteva reguli și bune practici pe care ar trebui să le urmați. În primul rând, ar trebui să evitați să răzuiți un site web dacă acesta afirmă în mod explicit că nu dorește să o faceți. Puteți afla acest lucru căutând un /robots.txt fișier pe site-ul țintă.
Majoritatea site-urilor web permit accesarea cu crawlere pe web deoarece doresc ca motoarele de căutare să-și indexeze conținutul. Puteți răzui astfel de site-uri web, deoarece imaginile lor sunt disponibile public.
Cu toate acestea, doar pentru că poți descărca o imagine, asta nu înseamnă că o poți folosi ca și cum ar fi a ta. Majoritatea site-urilor web își licențiază imaginile pentru a vă împiedica să le republicați sau să le reutilizați în alte moduri. Presupuneți întotdeauna că nu puteți reutiliza imagini decât dacă există o derogare specifică.
Configurarea pachetului Python
Va trebui să instalați câteva pachete înainte de a începe. Dacă nu aveți Python instalat pe computer, vizitați oficial python.org site-ul web pentru a descărca și instala cea mai recentă versiune.
Apoi, deschideți terminalul în folderul proiectului și activați un mediu virtual Python pentru a vă izola dependențele.
În cele din urmă, instalați cereri și Frumoasa Supa pachete care folosesc pip:
solicitări pip install bs4
Razuirea imaginii cu Python
Pentru acest tutorial de răzuire a imaginii, veți folosi cereri bibliotecă pentru a prelua o pagină web care conține imaginile țintă. Veți transmite apoi răspunsul de pe site-ul respectiv în Frumoasa Supa pentru a prelua toate adresele de linkuri de imagini de la img Etichete. Veți scrie apoi fiecare fișier imagine într-un folder pentru a descărca imaginile.
Cum să obțineți adrese URL de imagini cu BeautifulSoup de la Python
Acum mergeți mai departe și creați un fișier Python în folderul rădăcină al proiectului. Asigurați-vă că adăugați .py extensia la numele fișierului.
Fiecare fragment de cod din acest tutorial continuă cu cel anterior.
Deschideți fișierul Python cu orice editor de cod bun și utilizați următorul cod pentru a solicita o pagină web:
import cereri
URL = „imaginiURL” # Înlocuiește-l cu adresa URL a site-ului web
getURL = requests.get (URL, headers={"User-Agent":"Mozilla/5.0"})
print (getURL.status_code)
Dacă programul de mai sus scoate un cod de răspuns de 200, cererea a avut succes. În caz contrar, poate doriți să vă asigurați că conexiunea la rețea este stabilă. De asemenea, asigurați-vă că ați furnizat o adresă URL validă.
Acum folosește Frumoasa Supa pentru a citi conținutul paginii web cu ajutorul html_parser:
din bs4 import Frumoasa Supa
supă = BeautifulSoup (getURL.text, 'html.parser')
imagini = soup.find_all('img')
imprimare (imagini)
Acest cod creează o listă de obiecte, fiecare reprezentând o imagine de pe pagina web. Totuși, ceea ce aveți nevoie din aceste date este textul fiecărei imagini src atribut.
Pentru a extrage sursa din fiecare img etichetă:
surse imagini = []
pentru imagine în imagini:
imageSources.append (image.get('src'))
imprimare (surse imagini)
Reluați codul, iar adresele imaginilor ar trebui să apară acum într-o nouă listă (surse imagini). Ați extras cu succes fiecare sursă de imagine din pagina web țintă.
Cum să salvați imaginile cu Python
Mai întâi, creați un folder de destinație de descărcare în directorul rădăcină al proiectului și denumiți-l imagini.
Pentru ca Python să descarce cu succes imaginile, căile acestora trebuie să fie adrese URL absolute complete. Cu alte cuvinte, trebuie să includă „ http://" sau " https://" prefix, plus domeniul complet al site-ului web. Dacă pagina web face referire la imaginile sale folosind adrese URL relative, va trebui să le convertiți în adrese URL absolute.
În cazul ușor, când URL-ul este absolut, inițierea descărcării este doar un caz de solicitare a fiecărei imagini din sursele extrase mai devreme:
pentru imagine în surse imagini:
webs = requests.get (imagine)
open('images/' + image.split('/')[-1], 'wb').write (webs.content)
The image.split('/')[-1] cuvântul cheie împarte linkul de imagine la fiecare bară oblică (/). Apoi preia numele fișierului imagine (inclusiv orice extensie) din ultimul element.
Rețineți că, în cazuri rare, numele fișierelor de imagine pot intra în conflict, ceea ce duce la suprascrieri de descărcare. Simțiți-vă liber să explorați soluții la această problemă ca o extensie a acestui exemplu.
Adresele URL absolute pot deveni destul de complicate, cu o mulțime de cazuri marginale de acoperit. Din fericire, există o metodă utilă în cereri.compat pachet numit urljoin. Această metodă returnează o adresă URL completă, având o adresă URL de bază și o adresă URL care poate fi relativă. Vă permite să rezolvați valorile pe care le veți găsi href și src atribute.
Codul final arată astfel:
din bs4 import Frumoasa Supa
URL = „imaginiURL” # Înlocuiește-l cu adresa URL a site-ului web
getURL = requests.get (URL, headers={"User-Agent":"Mozilla/5.0"})
supă = BeautifulSoup (getURL.text, 'html.parser')imagini = soup.find_all('img')
URL-uri rezolvate = []pentru imagine în imagini:
src = image.get('src')
resolvedURLs.append (requests.compat.urljoin (URL, src))
pentru imagine în URL-uri rezolvate:
webs = requests.get (imagine)
open('images/' + image.split('/')[-1], 'wb').write (webs.content)
Nu rămâneți niciodată fără date de imagine
Multe proiecte de recunoaștere a imaginii au lovit un zid de cărămidă din cauza unei cantități inadecvate de imagini pentru a antrena un model. Dar puteți oricând să răzuiți imagini de pe site-uri web pentru a vă îmbunătăți depozitul de date. Și, din fericire, Python este un răzuitor de imagini puternic pe care îl puteți folosi în mod continuu fără teama de a pierde prețul.
Dacă sunteți interesat să obțineți alte tipuri de date de pe web, poate doriți să aflați cum să utilizați Python pentru web scraping general.