A Python képkaparó nem csak egy eszköz a programozási ismeretek fejlesztéséhez. Használhatja a gépi tanulási projektek képeinek forrását is, vagy webhely-bélyegképeket generálhat. Bár lehet, hogy más módon is megtehet hasonló dolgokat, semmi sem tudja felülmúlni a saját maga által épített eszközökkel szerzett irányítást.

Ismerje meg, hogyan lehet képeket lekaparni bármely webhelyről a Python és a BeautifulSoup könyvtár segítségével.

Legális a képkaparás?

Tetszik általánosabb webkaparás, a képkaparás a webhely tartalmának letöltésére szolgáló módszer. Nem illegális, de van néhány szabály és bevált gyakorlat, amelyet be kell tartania. Először is, kerülje a webhely lekaparását, ha az kifejezetten kijelenti, hogy nem akarja. Ezt megtudhatja, ha keres a /robots.txt fájlt a céloldalon.

A legtöbb webhely lehetővé teszi a webes feltérképezést, mert azt akarják, hogy a keresőmotorok indexeljék a tartalmukat. Az ilyen webhelyeket lekaparhatja, mivel a képeik nyilvánosan elérhetők.

Az azonban, hogy letölthet egy képet, még nem jelenti azt, hogy úgy használhatja, mintha a sajátja lenne. A legtöbb webhely licenceli képeit, hogy megakadályozza azok újraközzétételét vagy más módon történő újrafelhasználását. Mindig feltételezze, hogy nem használhatja újra a képeket, hacsak nincs külön mentesség.

Python csomag beállítása

Mielőtt elkezdené, telepítenie kell néhány csomagot. Ha nincs Python telepítve a számítógépére, keresse fel a hivatalos oldalt python.org webhelyet a legújabb verzió letöltéséhez és telepítéséhez.

Ezután nyissa meg a terminált a projekt mappájába, és aktiválni egy Python virtuális környezetet hogy elszigetelje a függőségeit.

Végül telepítse a kéréseket és Gyönyörű leves csomagok pip használatával:

pip install bs4 kérések

Képkaparás Python segítségével

Ehhez a képkaparási oktatóanyaghoz használja a kéréseket könyvtárat a célképeket tartalmazó weboldal lekéréséhez. Ezután átadja a választ a webhelyről a következőnek Gyönyörű leves az összes képhivatkozás címének lekéréséhez img címkéket. Ezután minden képfájlt egy mappába kell írnia a képek letöltéséhez.

Kép URL-ek lekérése a Python's BeautifulSoup segítségével

Most menjen előre, és hozzon létre egy Python-fájlt a projekt gyökérmappájában. Győződjön meg arról, hogy csatolja a .py a fájlnév kiterjesztését.

Ebben az oktatóanyagban minden kódrészlet az előzőtől folytatódik.

Nyissa meg a Python fájlt a következővel bármilyen jó kódszerkesztő és a következő kóddal kérhet weboldalt:

import kéréseket
URL = "imagesiteURL" # Cserélje ki ezt a webhely URL-címével
getURL = requests.get (URL, headers={"User-Agent":"Mozilla/5.0"})
nyomtatás (getURL.status_code)

Ha a fenti program 200-as válaszkódot ad ki, a kérés sikeres volt. Ellenkező esetben érdemes megbizonyosodni arról, hogy a hálózati kapcsolat stabil. Ezenkívül győződjön meg arról, hogy érvényes URL-t adott meg.

Most használd Gyönyörű leves segítségével elolvashatja a weboldal tartalmát html_parser:

tól től bs4 import Gyönyörű leves

soup = BeautifulSoup (getURL.text, 'html.parser')

images = soup.find_all('img')
nyomtatás (képek)

Ez a kód létrehozza az objektumok listáját, amelyek mindegyike egy-egy képet képvisel a weboldalról. Mindazonáltal, amire szüksége van ezekből az adatokból, az az egyes képek szövege src tulajdonság.

Mindegyikből kivonni a forrást img címke:

imageSources = []

számára kép ban ben képek:
imageSources.append (image.get('src'))

nyomtatás (képforrások)

Futtassa újra a kódot, és a képcímeknek most egy új listában kell megjelenniük (imageSources). Sikeresen kinyerte az egyes képforrásokat a cél weboldalról.

Hogyan mentsük el a képeket Python segítségével

Először hozzon létre egy letöltési célmappát a projekt gyökérkönyvtárában, és nevezze el képeket.

Ahhoz, hogy a Python sikeresen letölthesse a képeket, az elérési útjuknak teljes abszolút URL-nek kell lennie. Más szavakkal, tartalmazniuk kell a " http://" vagy " https://" előtag, valamint a webhely teljes domainje. Ha a weboldal relatív URL-ek használatával hivatkozik a képeire, akkor ezeket abszolút URL-ekké kell konvertálnia.

Könnyebb esetben, amikor az URL abszolút, a letöltés elindítása csak annyi, hogy minden képet lekérünk a korábban kivont forrásokból:

számára kép ban ben képforrások:
webs = kérések.get (kép)
open('images/' + image.split('/')[-1], 'wb').write (webs.content)

Az image.split('/')[-1] kulcsszó felosztja a képhivatkozást minden perjelnél (/). Ezután lekéri a képfájl nevét (beleértve a kiterjesztést is) az utolsó elemből.

Ne feledje, hogy ritka esetekben a képfájlnevek ütközhetnek, ami a letöltés felülírását eredményezheti. Nyugodtan keressen megoldásokat erre a problémára a példa kiterjesztéseként.

Az abszolút URL-ek meglehetősen bonyolultak lehetnek, és sok szélső esetet kell lefedni. Szerencsére van egy hasznos módszer a kéréseket.compat nevű csomagot urljoin. Ez a metódus egy teljes URL-t ad vissza, megadva egy alap URL-t és egy URL-t, amely lehet relatív. Lehetővé teszi, hogy feloldja az értékeket, amelyekben megtalálható href és src attribútumok.

A végső kód így néz ki:

tól től bs4 import Gyönyörű leves
URL = "imagesiteURL" # Cserélje ki ezt a webhely URL-címével
getURL = requests.get (URL, headers={"User-Agent":"Mozilla/5.0"})
soup = BeautifulSoup (getURL.text, 'html.parser')

images = soup.find_all('img')
megoldott URL-ek = []

számára kép ban ben képek:
src = image.get('src')
solvedURLs.append (requests.compat.urljoin (URL, src))

számára kép ban ben megoldott URL-ek:
webs = kérések.get (kép)
open('images/' + image.split('/')[-1], 'wb').write (webs.content)

Soha ne maradjon le képadatokról

Sok képfelismerő projekt téglafalba ütközik, mivel nem volt megfelelő mennyiségű kép a modell betanításához. De mindig lekaparhat képeket a webhelyekről, hogy növelje adattárát. És szerencsére a Python egy erőteljes képkaparó, amelyet folyamatosan használhat anélkül, hogy félne a kiárazástól.

Ha más típusú adatokat szeretne lekérni az internetről, érdemes megtudnia, hogyan használhatja a Pythont általános webkaparáshoz.