Scraping Market Place dengan Selenium
Web scraping terhadap market place cukup populer, salah satu indikatornya adalah banyak permintaan di situs bagi freelancer. Dalam tulisan ini kita akan melakukan scraping sederhana pada salah satu market place di Indonesia.
Jika pada tulisan–tulisan sebelumnya penulis banyak menggunakan Scrapy, kali ini kita akan menggunakan Selenium. Sebab utamanya adalah karena mayoritas market place menggunakan javascript untuk me-load halamannya dan Selenium yang mengotomasi browser, secara default sudah mendukung itu.
Teknologi yang akan kita gunakan:
Instalasi Selenium
Selenium dapat digunakan pada banyak bahasa pemrograman seperti Ruby, Java, JavaScript, C# dan Python. Kita akan menggunakan, tentu saja, Python.
Peramban yang didukung Selenium juga beragam, Edge, IE, Safari, Opera, Chrome dan Firefox. Kita sudah mencoba Chrome, sekarang saatnya mencoba yang lain, Firefox.
Python
Mudah saja, cukup ketik di command prompt/console/terminal.
pip install selenium
Firefox
Bagian ini juga mudah, cukup unduh dari sini.
Pada saat tulisan ini dibuat, versi Gecko Driver terbaru adalah 0.26.0. Driver ini mendukung versi Firefox minimal 60. Karena itu jika pembaca tidak ingin mengunduh Firefox, cukup pastikan versi Firefox yang terpasang adalah versi 60 dan setelahnya.
Untuk yang belum mengetahuinya, versi Firefox dapat dilihat di menu Help > About Firefox.
Gecko Driver
Dari halaman ini, pilih yang sesuai dengan platform yang Anda gunakan.
Kemudian ekstraksi berkas tersebut. Dalam contoh, penulis mengekstraksi di partisi d sehingga gecko driver akan beralamat di “d:\geckodriver.exe“.
Selenium Sederhana
Kita akan mulai dari kode sangat sederhana kemudian meningkatkan tantangan dengan menggabungkan Selenium Python dengan OpenPyXL.
Kode Sangat Sederhana
Kode di bawah ini hanya akan membuka blog ini di browser, menunggu lima detik kemudian browser ditutup.
import time from selenium import webdriver driver = webdriver.Firefox(executable_path="d:\geckodriver.exe") driver.get("https://basangdata.com") time.sleep(5) driver.close()
Parameter executable_path diisi dengan alamat gecko driver, sila sesuaikan dengan kondisi pembaca.
Kode Sederhana
Tulisan ini bertujuan mendemokan scraping data dari market place. Kasus yang kita hadapi adalah bagaimana mendapatkan url penjual dari data produk yang kita punyai.
Sebagai ilustrasi, kita memiliki berkas excel bernama mp.xlsx dengan kolom A berisi url produk dan kolom B yang harus diisi dengan url penjual. Kode kita akan menyimpan hasil kerjanya pada berkas excel baru bernama mp_url.xlsx.
Url supplier adalah gabungan dari https://shopee.co.id/ + username. Tugas kita adalah mencari elemen yang berisi username.
Hasil observasi beberap url produk, ternyata username tersebut ada di dalam elemen div dengan kelas _3Lybjn.
Sila membaca tulisan sebelumnya jika pembaca belum mengetahui bagaimana caranya mendapatkan elemen tersebut.
Kode selengkapnya adalah.
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException from openpyxl import load_workbook wb = load_workbook('mp.xlsx', data_only=True) driver = webdriver.Firefox(executable_path="d:\geckodriver.exe") delay = 3 # Menunggu selama 3 detik root_url = 'https://shopee.co.id/' for ws in wb.worksheets: max_row_a = ws.max_row + 1 for row_a in range(2, max_row_a): url = ws['A' + str(row_a)].value url_username = '' if url: driver.get(url) try: wait_username = WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.CLASS_NAME, '_3Lybjn'))) url_username = root_url + driver.find_element(By.CLASS_NAME, '_3Lybjn').text except TimeoutException: url_username = '' ws['B' + str(row_a)].value = url_username driver.close() wb.save('mp_url.xlsx') # Simpan sebagai berkas excel baru
Banyak class Selenium Python yang dimpor terutama karena kode kita harus menunggu hingga elemen _3Lybjn di-load oleh browser. Eksepsi digunakan agar kode kita tidak berhenti di tengah jalan jika terjadi kesalahan.
Kode di atas menggunakan By.CLASS_NAME untuk mendapatkan elemen berdasarkan kelasnya. Silahkan merujuk pranala ini untuk mendapatkan berbagai metode seleksi elemen yang didukung Selenium Python.
Jika pembaca ingin menjalankan Selenium secara headless (browser tidak ditampilkan), tambah dan sesuaikan bagian kode ini.
from selenium.webdriver.firefox.options import Options # Ini ditambahkan options = Options() # Ini ditambahkan options.headless = True # Ini ditambahkan driver = webdriver.Firefox(executable_path="d:\geckodriver.exe", options=options) # Ini diubah
Cover Photo by Charles Deluvio on Unsplash
One Reply to “Scraping Market Place dengan Selenium”