Pengikis gambar Python bukan hanya alat untuk mengasah keterampilan pemrograman Anda. Anda juga dapat menggunakannya untuk sumber gambar untuk proyek pembelajaran mesin, atau membuat gambar mini situs. Meskipun mungkin ada cara lain untuk melakukan hal serupa, tidak ada yang bisa mengalahkan kontrol yang Anda miliki menggunakan alat yang Anda buat sendiri.
Pelajari cara mengikis gambar dari situs web mana pun menggunakan Python dan perpustakaan BeautifulSoup.
Apakah Pengikisan Gambar Legal?
Suka pengikisan web yang lebih umum, pengikisan gambar adalah metode untuk mengunduh konten situs web. Ini tidak ilegal, tetapi ada beberapa aturan dan praktik terbaik yang harus Anda ikuti. Pertama, Anda harus menghindari menggores situs web jika situs tersebut secara eksplisit menyatakan bahwa Anda tidak menginginkannya. Anda dapat menemukan ini dengan mencari /robots.txt file di situs target.
Sebagian besar situs web mengizinkan perayapan web karena mereka ingin mesin pencari mengindeks konten mereka. Anda dapat mengikis situs web tersebut karena gambarnya tersedia untuk umum.
Namun, hanya karena Anda dapat mengunduh gambar, bukan berarti Anda dapat menggunakannya seolah-olah itu milik Anda sendiri. Sebagian besar situs web melisensikan gambar mereka untuk mencegah Anda memublikasikan ulang atau menggunakannya kembali dengan cara lain. Selalu asumsikan bahwa Anda tidak dapat menggunakan kembali gambar kecuali ada pengecualian khusus.
Pengaturan Paket Python
Anda harus menginstal beberapa paket sebelum memulai. Jika Anda belum menginstal Python di komputer Anda, kunjungi official python.org situs web untuk mengunduh dan menginstal versi terbaru.
Selanjutnya, buka terminal Anda ke folder proyek Anda dan aktifkan lingkungan virtual Python untuk mengisolasi dependensi Anda.
Terakhir, instal permintaan dan sup cantik paket menggunakan pip:
pip instal permintaan bs4
Pengikisan Gambar Dengan Python
Untuk tutorial menggores gambar ini, Anda akan menggunakan permintaan perpustakaan untuk mengambil halaman web yang berisi gambar target. Anda kemudian akan meneruskan tanggapan dari situs web itu ke sup cantik untuk mengambil semua alamat tautan gambar dari gambar tag. Anda kemudian akan menulis setiap file gambar ke dalam folder untuk mengunduh gambar.
Cara Mengambil URL Gambar Dengan BeautifulSoup Python
Sekarang lanjutkan dan buat file Python di folder root proyek Anda. Pastikan Anda menambahkan .py ekstensi ke nama file.
Setiap cuplikan kode dalam tutorial ini melanjutkan dari yang sebelumnya.
Buka file Python dengan editor kode apa pun yang bagus dan gunakan kode berikut untuk meminta halaman web:
impor permintaan
URL = "URL situs gambar" # Ganti ini dengan URL situs web
getURL = request.get (URL, headers={"User-Agent":"Mozilla/5.0"})
cetak (getURL.status_code)
Jika program di atas mengeluarkan 200 kode respons, permintaan berhasil. Jika tidak, Anda mungkin ingin memastikan bahwa koneksi jaringan Anda stabil. Selain itu, pastikan Anda telah memberikan URL yang valid.
Sekarang gunakan sup cantik untuk membaca konten halaman web dengan bantuan html_parser:
dari bs4 impor sup cantik
sup = BeautifulSoup (getURL.text, 'html.parser')
gambar = sup.find_all('img')
cetak (gambar)
Kode ini membuat daftar objek, masing-masing mewakili gambar dari halaman web. Namun, yang Anda butuhkan dari data ini adalah teks dari setiap gambar src atribut.
Untuk mengekstrak sumber dari masing-masing gambar menandai:
sumber gambar = []
untuk gambar di gambar-gambar:
imageSources.append (image.get('src'))
cetak (sumber gambar)
Jalankan kembali kode Anda, dan alamat gambar sekarang akan muncul di daftar baru (sumber gambar). Anda telah berhasil mengekstrak setiap sumber gambar dari halaman web target.
Cara Menyimpan Gambar Dengan Python
Pertama, buat folder tujuan unduhan di direktori root proyek Anda dan beri nama gambar-gambar.
Agar Python berhasil mengunduh gambar, jalurnya harus berupa URL absolut penuh. Dengan kata lain, mereka harus menyertakan " http://" atau " https://" awalan, ditambah domain lengkap situs web. Jika halaman web mereferensikan gambarnya menggunakan URL relatif, Anda harus mengubahnya menjadi URL absolut.
Dalam kasus yang mudah, ketika URL mutlak, memulai unduhan hanyalah kasus meminta setiap gambar dari sumber yang diekstraksi sebelumnya:
untuk gambar di sumber gambar:
webs = request.get (gambar)
buka('gambar/' + gambar.split('/')[-1], 'wb').tulis (webs.content)
Itu image.split('/')[-1] kata kunci membagi tautan gambar di setiap garis miring (/). Kemudian ia mengambil nama file gambar (termasuk ekstensi apa pun) dari elemen terakhir.
Ingatlah bahwa, dalam kasus yang jarang terjadi, nama file gambar mungkin berbenturan, yang mengakibatkan penimpaan unduhan. Jangan ragu untuk mengeksplorasi solusi untuk masalah ini sebagai perpanjangan dari contoh ini.
URL absolut bisa menjadi sangat rumit, dengan banyak kasus tepi yang harus ditutupi. Untungnya, ada metode yang berguna dalam permintaan.compat paket yang disebut urljoin. Metode ini mengembalikan URL lengkap, mengingat URL dasar dan URL yang mungkin relatif. Ini memungkinkan Anda untuk menyelesaikan nilai yang akan Anda temukan di href dan src atribut.
Kode terakhir terlihat seperti ini:
dari bs4 impor sup cantik
URL = "URL situs gambar" # Ganti ini dengan URL situs web
getURL = request.get (URL, headers={"User-Agent":"Mozilla/5.0"})
sup = BeautifulSoup (getURL.text, 'html.parser')gambar = sup.find_all('img')
diselesaikanURL = []untuk gambar di gambar-gambar:
src = gambar.get('src')
resolveURLs.append (requests.compat.urljoin (URL, src))
untuk gambar di URL yang diselesaikan:
webs = request.get (gambar)
buka('gambar/' + gambar.split('/')[-1], 'wb').tulis (webs.content)
Jangan Pernah Kehabisan Data Gambar
Banyak proyek pengenalan gambar menemui jalan buntu karena jumlah gambar yang tidak memadai untuk melatih seorang model. Tetapi Anda selalu dapat mengikis gambar dari situs web untuk meningkatkan penyimpanan data Anda. Dan untungnya, Python adalah pengikis gambar yang kuat yang dapat Anda gunakan terus menerus tanpa takut kehilangan harga.
Jika Anda tertarik untuk mengambil jenis data lain dari web, Anda mungkin ingin mengetahui cara menggunakan Python untuk pengikisan web umum.