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.