Škrabka obrázků v Pythonu není jen nástroj pro zdokonalování vašich programátorských dovedností. Můžete jej také použít jako zdroj obrázků pro projekt strojového učení nebo generovat miniatury stránek. I když mohou existovat jiné způsoby, jak dělat podobné věci, nic nepřekoná kontrolu, kterou máte pomocí nástrojů, které si sami vytvoříte.
Naučte se odstraňovat obrázky z libovolného webu pomocí Pythonu a knihovny BeautifulSoup.
Je škrábání obrázků legální?
Jako obecnější web scraping, škrábání obrázků je metoda pro stahování obsahu webových stránek. Není to nezákonné, ale existují určitá pravidla a osvědčené postupy, které byste měli dodržovat. Za prvé, měli byste se vyhnout seškrabování webové stránky, pokud výslovně uvádí, že si to nepřeje. Můžete to zjistit vyhledáním a /robots.txt soubor na cílovém webu.
Většina webových stránek umožňuje procházení webu, protože chtějí, aby vyhledávače indexovaly jejich obsah. Takové webové stránky můžete seškrábat, protože jejich obrázky jsou veřejně dostupné.
To, že si můžete stáhnout obrázek, však neznamená, že jej můžete použít, jako by byl váš vlastní. Většina webových stránek licencuje své obrázky, aby vám zabránily v jejich opětovném publikování nebo v opětovném použití jinými způsoby. Vždy předpokládejte, že obrázky nemůžete znovu použít, pokud neexistuje konkrétní výjimka.
Nastavení balíčku Python
Než začnete, budete muset nainstalovat několik balíčků. Pokud nemáte na svém počítači nainstalovaný Python, navštivte oficiální stránky python.org webové stránky ke stažení a instalaci nejnovější verze.
Dále otevřete svůj terminál do složky projektu a aktivovat virtuální prostředí Pythonu izolovat své závislosti.
Nakonec nainstalujte žádosti a Krásná polévka balíčky používající pip:
požadavky na instalaci pip bs4
škrábání obrázku s Pythonem
Pro tento výukový program škrábání obrázků použijete žádosti knihovny k načtení webové stránky obsahující cílové obrázky. Poté odešlete odpověď z tohoto webu do Krásná polévka získat všechny adresy odkazů na obrázky img značky. Poté zapíšete každý soubor obrázku do složky, kde si obrázky stáhnete.
Jak načíst adresy URL obrázků pomocí Python's BeautifulSoup
Nyní pokračujte a vytvořte soubor Python v kořenové složce projektu. Ujistěte se, že jste připojili .py příponu názvu souboru.
Každý fragment kódu v tomto kurzu navazuje na předchozí.
Otevřete soubor Python pomocí jakýkoli dobrý editor kódu a použijte následující kód k vyžádání webové stránky:
import žádosti
URL = "imagesiteURL" # Nahraďte to adresou URL webu
getURL = requests.get (URL, headers={"User-Agent":"Mozilla/5.0"})
tisknout (getURL.status_code)
Pokud výše uvedený program odešle kód odezvy 200, požadavek byl úspěšný. V opačném případě můžete chtít zajistit, aby bylo vaše síťové připojení stabilní. Také se ujistěte, že jste zadali platnou adresu URL.
Nyní použijte Krásná polévka číst obsah webové stránky pomocí html_parser:
z bs4 import Krásná polévka
polévka = BeautifulSoup (getURL.text, 'html.parser')
images = soup.find_all('img')
tisknout (obrázky)
Tento kód vytvoří seznam objektů, z nichž každý představuje obrázek z webové stránky. Co však z těchto dat potřebujete, je text každého obrázku src atribut.
Chcete-li extrahovat zdroj z každého img štítek:
zdroje obrázků = []
pro obraz v snímky:
imageSources.append (image.get('src'))
tisknout (imageSources)
Spusťte znovu svůj kód a adresy obrázků by se nyní měly objevit v novém seznamu (Zdroje obrázků). Úspěšně jste extrahovali každý zdroj obrázků z cílové webové stránky.
Jak uložit obrázky pomocí Pythonu
Nejprve vytvořte cílovou složku pro stahování v kořenovém adresáři projektu a pojmenujte ji snímky.
Aby Python úspěšně stáhl obrázky, jejich cesty musí být úplné absolutní adresy URL. Jinými slovy, musí obsahovat „ http://" nebo " https://" prefix plus celá doména webu. Pokud webová stránka odkazuje na své obrázky pomocí relativních adres URL, budete je muset převést na absolutní adresy URL.
Ve snadném případě, kdy je adresa URL absolutní, je zahájení stahování pouze případem vyžádání každého obrázku z dříve extrahovaných zdrojů:
pro obraz v Zdroje obrázků:
weby = requesty.get (obrázek)
open('images/' + image.split('/')[-1], 'wb').write (webs.content)
The image.split('/')[-1] klíčové slovo rozdělí odkaz na obrázek při každém lomítku (/). Poté načte název souboru obrázku (včetně jakékoli přípony) z posledního prvku.
Mějte na paměti, že ve vzácných případech může dojít ke konfliktu názvů souborů obrázků, což může vést k přepsání stahování. Neváhejte a prozkoumejte řešení tohoto problému jako rozšíření tohoto příkladu.
Absolutní adresy URL mohou být poměrně komplikované, se spoustou okrajových případů, které je třeba pokrýt. Naštěstí existuje užitečná metoda v žádosti.compat balíček s názvem urljoin. Tato metoda vrací úplnou adresu URL se základní adresou URL a adresou URL, která může být relativní. Umožňuje vám vyřešit hodnoty, které najdete href a src atributy.
Konečný kód vypadá takto:
z bs4 import Krásná polévka
URL = "imagesiteURL" # Nahraďte to adresou URL webu
getURL = requests.get (URL, headers={"User-Agent":"Mozilla/5.0"})
polévka = BeautifulSoup (getURL.text, 'html.parser')images = soup.find_all('img')
resolvedURLs = []pro obraz v snímky:
src = image.get('src')
resolvedURLs.append (requests.compat.urljoin (URL, src))
pro obraz v vyřešené URL:
weby = requesty.get (obrázek)
open('images/' + image.split('/')[-1], 'wb').write (webs.content)
Nikdy nezkraťte obrazová data
Mnoho projektů rozpoznávání obrázků narazilo na cihlovou zeď kvůli nedostatečnému množství obrázků pro trénování modelu. Ale vždy můžete seškrábat obrázky z webových stránek, abyste zvýšili své úložiště dat. A naštěstí je Python výkonný škrabák na obrázky, který můžete používat nepřetržitě, aniž byste se museli obávat, že bude zdraženo.
Pokud máte zájem o načítání jiných typů dat z webu, možná budete chtít zjistit, jak používat Python pro obecné seškrabování webu.