Skrobak do obrazów w Pythonie to nie tylko narzędzie do doskonalenia umiejętności programowania. Możesz również użyć go do źródła obrazów dla projektu uczenia maszynowego lub wygenerować miniatury witryn. Chociaż mogą istnieć inne sposoby robienia podobnych rzeczy, nic nie może pokonać kontroli, którą masz za pomocą narzędzi, które sam tworzysz.

Dowiedz się, jak zeskrobać obrazy z dowolnej witryny internetowej za pomocą Pythona i biblioteki BeautifulSoup.

Czy usuwanie obrazów jest legalne?

Tak jak bardziej uogólnione skrobanie sieci, scraping obrazu to metoda pobierania zawartości witryny. Nie jest to nielegalne, ale istnieją pewne zasady i najlepsze praktyki, których należy przestrzegać. Po pierwsze, powinieneś unikać skrobania strony internetowej, jeśli wyraźnie stwierdza, że ​​tego nie chce. Możesz się tego dowiedzieć, szukając /robots.txt plik w witrynie docelowej.

Większość witryn umożliwia indeksowanie sieci, ponieważ chcą, aby wyszukiwarki indeksowały ich zawartość. Możesz zeskrobać takie strony, ponieważ ich obrazy są publicznie dostępne.

instagram viewer

Jednak tylko dlatego, że możesz pobrać obraz, nie oznacza to, że możesz go używać tak, jakby był twoim własnym. Większość witryn licencjonuje swoje obrazy, aby uniemożliwić ich ponowne publikowanie lub ponowne wykorzystanie w inny sposób. Zawsze zakładaj, że nie możesz ponownie użyć obrazów, chyba że istnieje konkretny wyjątek.

Konfiguracja pakietu Pythona

Zanim zaczniesz, musisz zainstalować kilka pakietów. Jeśli nie masz zainstalowanego Pythona na swoim komputerze, odwiedź oficjalną stronę python.org aby pobrać i zainstalować najnowszą wersję.

Następnie otwórz terminal w folderze projektu i aktywować wirtualne środowisko Pythona aby wyizolować swoje zależności.

Na koniec zainstaluj upraszanie oraz PięknaZupa pakiety za pomocą pip:

pip zainstaluj bs4 prośby

Skrobanie obrazów za pomocą Pythona

W tym samouczku dotyczącym skrobania obrazów użyjesz upraszanie biblioteka do pobierania strony internetowej zawierającej obrazy docelowe. Następnie przekażesz odpowiedź z tej witryny do PięknaZupa pobrać wszystkie adresy linków do zdjęć z obrazek Tagi. Następnie zapiszesz każdy plik obrazu w folderze, aby pobrać obrazy.

Jak pobrać adresy URL obrazów za pomocą BeautifulSoup Pythona?

Teraz śmiało utwórz plik Pythona w folderze głównym projektu. Upewnij się, że dołączasz .py rozszerzenie nazwy pliku.

Każdy fragment kodu w tym samouczku jest kontynuacją poprzedniego.

Otwórz plik Pythona za pomocą dowolny dobry edytor kodu i użyj następującego kodu, aby zażądać strony internetowej:

import upraszanie
URL = "URL witryny obrazu" # Zastąp to adresem URL witryny
getURL = requests.get (URL, headers={"User-Agent":"Mozilla/5.0"})
drukuj (getURL.status_code)

Jeśli powyższy program wygeneruje kod odpowiedzi 200, żądanie zakończyło się powodzeniem. W przeciwnym razie możesz chcieć upewnić się, że połączenie sieciowe jest stabilne. Upewnij się również, że podałeś prawidłowy adres URL.

Teraz użyj PięknaZupa zapoznać się z treścią strony internetowej za pomocą html_parser:

z bs4 import PięknaZupa

zupa = PięknaZupa (getURL.text, 'html.parser')

obrazy = zupa.find_all('img')
druk (obrazy)

Ten kod tworzy listę obiektów, z których każdy reprezentuje obraz ze strony internetowej. Jednak to, czego potrzebujesz z tych danych, to tekst każdego obrazu src atrybut.

Aby wyodrębnić źródło z każdego obrazek etykietka:

obrazŹródła = []

dla obraz w obrazy:
imageSources.append (image.get('src'))

drukuj (Źródła obrazu)

Uruchom ponownie kod, a adresy obrazów powinny teraz pojawić się na nowej liście (źródła obrazu). Pomyślnie wyodrębniłeś każde źródło obrazu z docelowej strony internetowej.

Jak zapisywać obrazy za pomocą Pythona?

Najpierw utwórz folder docelowy pobierania w katalogu głównym projektu i nazwij go obrazy.

Aby Python mógł pomyślnie pobrać obrazy, ich ścieżki muszą być pełnymi bezwzględnymi adresami URL. Innymi słowy, muszą zawierać „ http://" lub " https://" prefiks plus pełna domena strony. Jeśli strona internetowa odwołuje się do swoich obrazów za pomocą względnych adresów URL, musisz przekonwertować je na bezwzględne adresy URL.

W prostym przypadku, gdy adres URL jest bezwzględny, inicjowanie pobierania jest tylko przypadkiem żądania każdego obrazu z wcześniej wyodrębnionych źródeł:

dla obraz w obrazŹródła:
sieci = request.get (obraz)
open('images/' + image.split('/')[-1], 'wb').write (webs.content)

The image.split('/')[-1] słowo kluczowe dzieli link do obrazu przy każdym ukośniku (/). Następnie pobiera nazwę pliku obrazu (w tym dowolne rozszerzenie) z ostatniego elementu.

Należy pamiętać, że w rzadkich przypadkach nazwy plików obrazów mogą kolidować, co powoduje nadpisywanie plików do pobrania. Zachęcamy do zapoznania się z rozwiązaniami tego problemu jako rozszerzeniem tego przykładu.

Bezwzględne adresy URL mogą być dość skomplikowane, z wieloma skrajnymi przypadkami do omówienia. Na szczęście istnieje przydatna metoda w requesty.compat pakiet o nazwie urljoin. Ta metoda zwraca pełny adres URL, biorąc pod uwagę podstawowy adres URL i adres URL, który może być względny. Pozwala rozwiązać wartości, które znajdziesz w href oraz src atrybuty.

Ostateczny kod wygląda tak:

z bs4 import PięknaZupa
URL = "URL witryny obrazu" # Zastąp to adresem URL witryny
getURL = requests.get (URL, headers={"User-Agent":"Mozilla/5.0"})
zupa = PięknaZupa (getURL.text, 'html.parser')

obrazy = zupa.find_all('img')
rozwiązane adresy URL = []

dla obraz w obrazy:
src = image.get('src')
resolvedURLs.append (requests.compat.urljoin (URL, src))

dla obraz w rozwiązane adresy URL:
sieci = request.get (obraz)
open('images/' + image.split('/')[-1], 'wb').write (webs.content)

Nigdy nie zabraknie danych obrazu

Wiele projektów rozpoznawania obrazów uderza w mur z powodu niewystarczającej liczby obrazów do trenowania modelu. Ale zawsze możesz zeskrobać obrazy z witryn internetowych, aby zwiększyć swoje repozytorium danych. I na szczęście Python jest potężnym narzędziem do skrobania obrazów, którego możesz używać nieprzerwanie bez obawy, że zostaniesz przeceniony.

Jeśli interesuje Cię pobieranie innych typów danych z sieci, możesz chcieć dowiedzieć się, jak używać Pythona do ogólnego skrobania sieci.