Teman-teman pasti menyadari jikalau Python itu keliru satu bhs pemrograman terkenal yang dapat dipakai di banyak bidang. Sebutin aja, merasa berasal dari machine learning, knowledge science, web development, lebih-lebih system administration pun dapat dilibas serupa si Python.
Nah, Python terhitung seringnya jadi andalan disaat developer sudi bikin sistem atau program automation layaknya web scraper.
coding web scraper
Emang Boleh Se-Automation Ini?
Kalian terhitung pasti tahu, automation sudah jadi topik yang tetap hangat di dunia industri. Apa-apa yang ribet dan manual, pasti pengennya dibikin otomatis. Bener, nggak?
“Ngapain cape-cape ngerjain tugas beginian jikalau dapat dikerjain serupa mesin”, kata orang yang sudah penat dengan tugas yang repetitif.
man wearing white top using MacBook
Nah, itulah fungsinya automation. Intinya, automation adalah sistem otomatisasi yang dapat menyelesaikan tugas-tugas repetitif dengan efisien. Kita nggak kudu kembali lakukan suatu perihal secara manual.
Dalam dunia IT, automation mempunyai peran yang terlampau penting bikin ningkatin produktivitas dan efisiensi. Dari sekian banyak wujud automation, keliru satu yang banyak digandrungi dan diadopsi selagi ini–terutama sebagai ladang pembelajaran bikin pemula–adalah web scraping.
Pada menyadari nggak nih web scraping itu apa? Yuk, kita kulitin.
Masih Manual? Yang Bener Aje, Rugi Dong!
Itu kemungkinan kalimat yang dapat muncul jikalau kita tetap menolak automation.
Seperti yang tadi sudah dibahas, keliru satu wujud implementasi automation adalah web scraping. Web scraping adalah teknik pengambilan knowledge berasal dari sebuah web secara otomatis.
Teknik ini tuh berfungsi banget untuk banyak hal, merasa berasal dari pengumpulan informasi, asumsi pasar, penelitian akademis, monitoring berita dan fasilitas sosial, lebih-lebih sampai penegakan hukum. Keren, ya?
Nggak sampai di situ, web scraping terhitung kerap digunakan oleh para knowledge scientist untuk menganalisis sentimen fasilitas sosial, prediksi pergerakan saham, pemantauan persaingan bisnis, dan banyak lagi.
Iya, dong. Jangan remehin kekuatan web scraping makanya.
Coba nih, mari kita berandai-andai. Anggap aja anda seorang pebisnis yang dambakan memantau harga produk pesaing di lebih dari satu web e-commerce untuk memilih trick penetapan harga. Gimana caranya?
web scrapping
Ketimbang anda mendatangi tiap web dan mengecek harga produk satu per satu, anda dapat loh memakai teknik web scraping untuk secara otomatis ngumpulin knowledge harga produk berasal dari banyak web e-commerce sekaligus. Setelah itu, datanya dapat dipakai untuk asumsi tren harga dan identifikasi peluang untuk nentuin harga produk anda deh. Simpel.
Nah, kita dapat bikin script untuk web scraping dengan mudah memakai bhs pemrograman Python. Kerennya, kita sekalian dapat lakukan bedah kode biar makin menyadari gimana sistem penerapan Python untuk web scraping.
Udah siap? Mari kita berangkat.
Implementasi Web Scraper
Kali ini kita dapat belajar sebabkan sebuah program automation simpel memakai bhs pemrograman python untuk web scraping. Kita dapat coba mengumpulkan berbagai Info tentang kelas-kelas yang tersedia di Dicoding, layaknya nama kelas, jam belajar, rating, level, deskripsi, jumlah modul, dan total siswa terdaftar.
Konsultasi dengan ahlinya sekarang: Ade Prasetyo
Mari kita merasa berasal dari import module.
Import Module
Ada banyak python module yang tersedia untuk web scraping, di antaranya adalah Selenium dan BS4.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.firefox.options import Options
from bs4 import BeautifulSoup
Pada baris kode di atas, kita mengimpor sejumlah kebutuhan supaya sistem web scraping dapat jadi lebih lancar, antara lain:
webdriver: antarmuka untuk mengotomatisasi browser web.
By: untuk memilih metode pencarian elemen didalam halaman web, layaknya dengan ID, class, dan-lain-lain.
expected_conditions: berisi kumpulan keadaan yang digunakan dengan dengan WebDriverWait untuk tunggu sampai keadaan khusus terpenuhi sebelum saat melanjutkan eksekusi script.
WebDriverWait: untuk tunggu sampai keadaan khusus terpenuhi (misalnya, elemen muncul) sebelum saat melanjutkan eksekusi script.
Options: untuk menyesuaikan opsi selagi menggerakkan browser Firefox, layaknya menjalankannya didalam headless mode (berjalan terprogram tanpa UI).
BeautifulSoup: untuk menguraikan dan mengekstrak knowledge berasal dari dokumen HTML atau XML.
Dengan memakai paduan Selenium dan BS4 (BeautifulSoup), kita dapat mengotomatisasi jalinan dengan web browser (menggunakan Selenium) dan mengekstrak Info yang diperlukan berasal dari halaman web (menggunakan BeautifulSoup).
Konfigurasi WebDriver
Selanjutnya adalah kita kudu mengonfigurasi WebDriver untuk menyesuaikan dengan kebutuhan. Secara singkat, WebDriver itu adalah antarmuka untuk mengotomatisasi browser web.
Kodenya layaknya ini.
# Function to scrape knowledge from Dicoding
def scraper(url):
try:
# Configure WebDriver to use headless Firefox
options = Options()
options.add_argument(‘-headless’)
driver = webdriver.Firefox(options=options)
Baris kode di atas merupakan awal berasal dari sebuah fungsi yang dirancang untuk lakukan web scraping berasal dari web web yang diinginkan.
Pertama, kita mempunyai fungsi bernama scraper untuk mencampurkan semua sistem web scraping. Fungsi ini terima satu parameter yakni url, yang merupakan URL berasal dari halaman web yang dapat di-scrape.
Terus, untuk konfigurasi WebDriver, kita memilih opsi supaya Selenium memakai browser Firefox dengan mode headless yang artinya browser tidak dapat muncul selagi sistem scraping dilakukan.Kalau teman-teman simak, kita memakai blok try supaya disaat suatu operasi berlangsung kesalahan, kita dapat menangani error selanjutnya dengan baik.
Akses Website
Proses sesudah itu adalah mengakses web yang dapat di-scrape. Ini contoh kodenya.
# Get the URL given
driver.get(url)
# Selenium will wait for a maximum of 5 seconds for an element matching the given criteria to be found.
# If nomor element is found in that time, Selenium will elevate an error.
try:
wait = WebDriverWait(driver, timeout=5)
wait.until(EC.presence_of_element_located((By.ID, ‘course-list’)))
except:
elevate LookupError(“There is nomor element specified”)
Pertama, kita suruh si WebDriver (sesi browser) untuk mengakses URL yang sudah diberikan.
Terus, lagi-lagi kita memakai blok try untuk menangani skenario di mana Selenium dapat nunggu maksimum 5 detik sampai dia mendapatkan elemen dengan ID ‘course-list’. Kalau elemen yang kita cari ketemu didalam batas selagi yang ditentukan (5 detik didalam masalah ini), eksekusi script dapat dilanjutkan. Kalau nggak, Selenium dapat ngasih error.
Dengan ini, kode kita sudah menentukan pengaturan awal didalam sistem scraping dan tunggu sampai halaman web dimuat sepenuhnya sebelum saat melanjutkan eksekusi.
Parse HTML
Sekarang kita fokus pada pemanfaatan BeautifulSoup untuk menganalisis HTML berasal dari halaman web yang tadi sudah dimuat oleh Selenium.
# BeautifulSoup will parse the URL
content = driver.page_source
soup = BeautifulSoup(content, ‘html.parser’)
# Prepare the variable for JSON data
courses = []
Pertama, kita menyita source code HTML berasal dari halaman web yang tadi sudah dibuka oleh si WebDriver (Selenium).
Lanjut, source code HTML tadi diserahkan ke BeautifulSoup untuk diuraikan memakai HTML parser bawaan berasal dari BeautifulSoup.
Nantinya, kita dapat berinteraksi dengan variabel soup yang merupakan representasi struktur dokumen HTML untuk mengakses dan memanipulasi elemen-elemen yang diinginkan.
Selanjutnya, kita mendeklarasikan variabel courses sebagai list kosong. Variabel dapat kita memakai untuk mengumpulkan nilai-nilai yang dapat diekstrak berasal dari halaman web.
Ekstrak Informasi
Sekarang kita coba fokus ke pemanfaatan BeautifulSoup untuk mengekstrak Info khusus berasal dari elemen HTML yang sudah diuraikan sebelumnya.
# BeautifulSoup will find the CSS class that contain produk container
for course in soup.find_all(‘div’, class_=’col-md-6 mb-3′):
# Get the text from the specified element plus assign them to the variables
course_name = course.find(‘h5′, class_=’course-card__name’).text
course_hour = course.find_all(‘span’, ‘class’:’mr-2′)[0].text
course_summary = course.select(‘div.course-card__summary p’)[0].text
course_total_module = course.find_all(‘div’, class_= ‘course-card__info-item’)[0].find_all(‘span’)[0].contents[0]
course_level = course.find(‘span’, attrs=’class’: None).text
# Not all courses in the list has rating, so we should manage it.
# If it has rating, get the text. If none, set it to empty string.
try:
course_rating = course.find_all(‘span’, ‘class’:’mr-2′)[1].text
except IndexError:
# Handle the case when nomor span elements with the specified class are found
course_rating = ”
# Not all courses in the list has total students, so we should manage it.
# If it has total students, get the text. If none, set it to empty string.
try:
course_total_students = course.find_all(‘span’, ‘class’:’mr-3′)[1].get_text()
except:
course_total_students = ”
Kode di atas di mulai dengan memakai BeautifulSoup untuk mendapatkan semua elemen div yang mempunyai CSS class ‘col-md-6 mb-3’.
Dari elemen-elemen yang sudah ditemukan, kita melacak lebih dari satu Info berikut.
course_name -> Informasi ini kita dapatkan melalui cari elemen h5 dengan class ‘course-card__name’ dan ambil teksnya.
course_hour -> Kita melacak semua elemen span dengan atribut class yang sesuai dan menyita teksnya.
course_summary -> Menggunakan metode select() untuk memilih elemen div dengan class ‘course-card__summary’, kemudian memilih elemen p di dalamnya, dan menyita teksnya.
course_total_module -> Kode ini melacak semua elemen div dengan class ‘course-card__info-item’, kemudian menyita teks berasal dari elemen span pertama di dalamnya.
course_level -> Kode ini melacak elemen span yang tidak mempunyai atribut class dan menyita teksnya. Ini adalah tingkat kursus.
try – except blok pertama -> Blok try ini mencoba untuk mendapatkan elemen yang mempunyai kelas CSS ‘mr-2’ yang menunjukkan rating kursus. Jika elemen ditemukan, teksnya dapat diambil. Jika tidak ditemukan, dapat membuahkan IndexError, yang ditangkap oleh blok except dan rating kursus diatur jadi string kosong.
try – except blok ke-2 -> Blok try ini serupa dengan yang pertama, tetapi melacak elemen yang mempunyai kelas CSS ‘mr-3’ yang menunjukkan jumlah total siswa didalam kursus. Jika elemen ditemukan, teksnya dapat diambil. Jika tidak ditemukan, dapat membuahkan pengecualian, dan jumlah total siswa diatur jadi string kosong.
Kamu dapat memandang bahwa kode di atas memakai berbagai variasi untuk mendapatkan elemen. Hal ini sengaja untuk menunjukkan ke teman-teman bahwa cara melacak elemen tidak hanya satu metode, melainkan banyak.
Penambahan Data
Baris kode seterusnya dapat bertanggung jawab untuk memasukkan knowledge yang sudah diekstrak berasal dari tiap-tiap kelas ke didalam variabel courses.
# Append the scraped knowledge into courses variable for JSON data
courses.append(
{
‘Course Name’: course_name,
‘Learning Hour’: course_hour,
‘Rating’: course_rating,
‘Level’: course_level,
‘Summary’: course_summary,
‘Total Modules’: course_total_module,
‘Total Students’: course_total_students
}
)
Kamu dapat cermati kode di atas, kita memakai metode courses.append() bikin nambahin knowledge yang sudah didapatkan pada mulanya ke didalam list courses.
Setelah itu, di dalamnya kita memakai struktur knowledge didalam wujud dictionary yang berisi Info yang sudah diekstrak berasal dari suatu kelas, merasa berasal dari nama kelas, jam belajar, rating, level, deskripsi, jumlah modul, sampai total siswa terdaftar.
Setiap Info kelas disimpan dengan format key:value, di mana key mewakili jenis Info dan value sebagai representasi nilai berasal dari Info tersebut.
Dengan kayak gini, tiap kali kita nemuin kelas lain di halaman itu, Info tentang kelas selanjutnya dapat ditambahkan ke didalam list courses.
Nah, tepat sistem scraping selesai, list courses dapat berisi semua knowledge yang sudah diekstrak dan siap bikin diproses lebih lanjut. Misalnya, dambakan disimpan didalam format JSON atau digunakan untuk asumsi data.