Koleksi Data Image Menggunakan Python
Salah satu syarat ketika kita ingin mengimplementasikan teknologi Artificial Intelligence (AI) seperti Machine Learning ataupun Deep Learning adalah dengan tersedianya dataset yang dibutuhkan. Dataset merupakan kumpulan item yang saling berkaitan di mana item dari dataset tersebut dapat dikelola baik secara individu, secara kombinasi maupun dikelola sebagai satu kesatuan.
Terdapat beberapa situs yang menyediakan berbagai macam dataset, akan tetapi tidak selalu dataset yang kita butuhkan tersedia di sana. Hal tersebut menjadi tugas kita untuk mendapatkan sendiri data yang kita butuhkan. Kita bisa mengoleksi data dengan cara apapun, baik dengan cara konvensional ataupun dengan cara-cara khusus seperti melalui program dan lain sebagainya.
Pada tulisan ini, kita akan fokus membahas cara mengumpulkan data gambar dari web menggunakan Python. Data gambar ini biasanya digunakan untuk task dalam bidang Computer Vision. Untuk mengumpulkan data dari web, terdapat beberapa cara, namun saya hanya akan membahas salah satunya saja, yaitu dengan menggunakan teknik Scraping.
Pengertian
Scraping adalah teknik mengekstrak secara spesifik sebuah data dari website. Maksud dari spesifik adalah kita bisa mengekstrak data tertentu dari sebuah website. Terdapat beberapa library Python yang dapat digunakan untuk Scraping, namun pada tulisan ini, saya hanya akan membahas menggunakan library Beautiful Soup.
Library Beautiful Soup merupakan library web parser untuk bahasa Python yang memiliki banyak fungsi untuk melakukan navigasi objek DOM pada HTML.
Dalam task ini, kita akan melakukan scraping data dari website Google Image. Ini kita lakukan hanya sebagai pembelajaran, saya sarankan agar tidak melakukan Scraping dengan tujuan komersil, karena bisa saja data yang kita ekstrak dari website adalah data yang mempunyai hak cipta. Jika mau melakukan Scraping, lebih baik pada website yang memang open source untuk membiarkan datanya dikonsumsi oleh pihak lain.
Implementasi Pada Python
Langkah pertama adalah instal terlebih dahulu library Beautiful Soup dengan cara membuka Command Prompt atau Anaconda Prompt, lalu ketikan perintah berikut:
pip install beautifulsoup4
Kita juga membutuhkan satu library lagi untuk dapat menggunakan library Beautiful Soup, yaitu library Pillow. Instal library Pillow dengan mengetikan perintah berikut:
pip install pillow
Selanjutnya adalah import semua library yang kita butuhkan untuk melakukan Scraping.
from bs4 import BeautifulSoupimport requests
import shutil
import re
Kita membutuhkan 4 library, yang pertama tentu saja library Beautiful Soup, selanjutnya:
- Library requests, berfungsi untuk mengirimkan semua jenis permintaan ke HTTP.
- Library shutil, atau Shell Utilities berfungsi untuk melakukan operasi file dan direktori yang berbeda.
- Library re, atau Regular Expression berfungsi untuk melakukan pencarian string atau teks dengan menggunakan pola atau pattern.
Kita akan mengekstrak gambar dari halaman web di atas, yaitu gambar dari Google Image dengan keyword “bird”. Salin link pada halaman tersebut.
url = “https://www.google.com/search?q=bird&safe=strict&rlz=1C1CHBF_enID842ID842&sxsrf=ALeKk01ncOMnpqFnxpf92NytEfmTzes0XA:1586260439046&source=lnms&tbm=isch&sa=X&ved=2ahUKEwjH8vXPoNboAhUMeisKHRrACNEQ_AUoAXoECBgQAw&biw=1242&bih=632"response = requests.get(url)
resUrl = BeautifulSoup(response.text, “html.parser”)filter_url = resUrl.find_all(“img”, {‘src’:re.compile(‘http:’)})
filter_url
Dari DOM dalam HTML, ekstrak link yang kita perlukan untuk mendownload gambar yang ada pada halaman web.
- Tempel link yang sudah disalin sebelumnya kedalam variabel url.
- Kirim request ke halaman tersebut menggunakan library request dengan sintaks request.get() untuk mendapatkan objek-objek yang terdapat dalam url tersebut.
- Menggunakan library BeautifulSoup, konversikan url yang sudah bisa diakses menjadi teks dengan parameter html.parser. Parameter tersebut berfungsi untuk menguraikan semua elemen HTML yang terdapat dalam url.
- Ekstrak tag (</>) yang kita butuhkan untuk mendapatkan link download gambar, di sini kita akan mengekstrak dari DOM HTML yang memiliki tag img. Dari tag tersebut, ekstrak lagi elemen yang terdapat src dengan value http:. Value dalam src ini lah link untuk kita mendownload gambar.
src_image = []for src in filter_url:
src_image.append(src.get('src'))
Selanjutnya, elemen tag yang sudah didapat, difilter kembali dengan mengekstrak src atau link downloadnya saja untuk kemudian ditambahkan kedalam list src_image.
def download(image):
response = requests.get(image, stream=True)
realname = ''.join(e for e in image if e.isalnum()) file = open("/content/drive/My Drive/images/{}.jpg".format(realname), 'wb') response.raw.decode_content = True
shutil.copyfileobj(response.raw, file) del response
Buat fungsi untuk mendownload gambar berdasarkan hasil akhir filtering (linknya). Pada tulisan ini, fungsi saya beri nama download.
- Kirim request kembali pada link dengan set parameter stream adalah True.
- Buat nama file berdasarkan link yang sudah diminta. Pada proses ini, kita akan menghapus semua spasi dan karakter tertentu sehingga kita mendapatkan nama file yang utuh.
- Tentukan lokasi penyimpanan gambar yang akan didownload.
- Salin semua data dari response ke dalam lokasi file menggunakan library shutil dengan sintaks shutil.copyfileobj().
- Terakhir, hapus response.
for i in range(0, len(src_image)):
download(src_image[i])
Terakhir, looping semua link yang terdapat dalam list src_image untuk diproses kedalam fungsi download. Berikut merupakan hasil dari Scraping gambar dari web Google Image.
Sekian pembahasan kita tentang Scraping data gambar menggunakan library Beautiful Soup. Semoga bermanfaat.