Apakah mempelajari cara melakukan web scraping merupakan ide yang bagus? Jika Anda ingin menghemat ratusan jam kerja, maka Anda sebaiknya mempelajarinya. Selain itu, ini adalah keterampilan keren yang bisa dimiliki seorang programmer.
Web scraping adalah proses mengekstrak data dari situs web, dan karena data tersedia di mana-mana, Anda bisa mendapatkannya dan memprosesnya secara efektif dengan menguasai teknik dasar maupun lanjutan.
Kami telah menyiapkan panduan untuk pemula yang mencakup semua hal penting, mulai dari memahami struktur situs web, mempelajari teknik dasar hingga konsep web scraping lanjutan, agar Anda bisa menjadi ahli.
Memahami Struktur Situs Web
Sebelum mulai melakukan scraping, Anda perlu memahami bagaimana situs web disusun.
Pertama, situs web dibuat menggunakan kode. Yang paling umum adalah HTML (Hypertext Markup Language), CSS (Cascading Style Sheet), dan JavaScript.
HTML adalah yang paling populer karena mudah digunakan. HTML menentukan struktur dan konten halaman web menggunakan elemen, yang direpresentasikan oleh tag.
Misalnya,
- <h1> untuk judul,
- <p> untuk paragraf,
dan masih banyak lagi (jumlahnya BANYAK).
Berikut contoh tampilan kode HTML:
<html> <head> <title>Example Website</title> </head> <body> <h1>Welcome to my website!</h1> <p>This is a paragraph of text.</p> <ul> <li>Item 1</li> <li>Item 2</li> <li>Item 3</li> </ul> </body> </html> </body> </html>Terakhir, CSS menentukan gaya elemen HTML, sedangkan JavaScript bertanggung jawab atas perilaku dinamis situs web.
Alat scraping yang akan kita gunakan akan menavigasi halaman berdasarkan strukturnya dan mengidentifikasi konten yang perlu diekstrak. Situs dengan struktur yang lebih teratur dan deskriptif cenderung lebih mudah di-scrape. Dan sebagai pemula, Anda tentu menghargai hal itu, bukan?
Menyiapkan Lingkungan Pengembangan Anda
Oke, sekarang setelah Anda memahami struktur situs web, Anda bisa mulai menyiapkan lingkungan pengembangan.
Pertama, Anda perlu memilih bahasa pemrograman, karena tidak semuanya cocok untuk tugas ini. Python adalah pilihan paling populer untuk scraping karena merupakan bahasa tingkat tinggi, mudah digunakan, dan juga memiliki pustaka, kerangka kerja, serta alat bawaan yang hebat.
Semua ini membantu menyelesaikan tugas tertentu terkait scraping, seperti berikut:
- Requests: memudahkan pembuatan permintaan HTTP ke situs web target.
- BeautifulSoup: pustaka ini digunakan untuk mengurai dokumen HTML dan XML. Namun, tunggu sebentar, apa itu penguraian? Ini adalah proses menganalisis dan menafsirkan data terstruktur.
- Selenium: untuk mengotomatisasi peramban web agar dapat melakukan tugas yang menyimulasikan interaksi manusia.
- Scrapy: kerangka kerja komprehensif ini dapat digunakan untuk berbagai tugas, seperti penelusuran web (mencari URL untuk mengekstrak data), penambangan data, dan pengujian otomatis.
Bagaimana Cara Memulainya?
- Penyiapan lingkungan: unduh versi Python terbaru dan instal. Semudah itu.
- Siapkan lingkungan virtual: Buat lingkungan virtual untuk menjaga agar dependensi proyek Anda tetap terisolasi. Buka terminal dan jalankan perintah berikut:
python -m venv myenv source myenv/bin/activate # For Unix/Linux myenv\Scripts\activate.bat # For Windows3. Instal pustaka dan alat: Saya sarankan Anda menginstal Requests, Selenium, BeautifulSoup, dan Scrapy untuk memulai. Anda bisa menginstalnya menggunakan perintah “pip install”; cukup buka terminal dan jalankan perintah berikut:
pip install requests beautifulsoup4 scrapy seleniumWeb Scraping 101: Etika dan Praktik Terbaik
Tunggu dulu. Sebelum membahas aspek teknis, mari kita tinjau implikasi etis dan praktik terbaik dalam web scraping.
Hampir semua scraper mengetahui hal ini, tetapi pemula perlu memahami pedoman berikut agar Anda tetap berada dalam batas yang berlaku:
- Patuhi Robots.txt: Aturan pertama dalam scraping adalah Anda harus mematuhi Robots.txt. Ini adalah berkas teks yang dimiliki setiap situs dan pada dasarnya memberi tahu semua orang apa yang boleh dan tidak boleh di-scrape.
- Patuhi ketentuan layanan situs: periksa ketentuan layanan situs untuk mengetahui apakah web scraping diizinkan.
- Batasi frekuensi scraping dan dampaknya terhadap server: Hindari mengirim terlalu banyak permintaan dalam waktu singkat. Selain itu, hindari membebani server dengan menerapkan jeda di antara permintaan.
- Gunakan API (jika tersedia): sebelum melakukan scraping, periksa apakah situs menyediakan API untuk mengakses data. Izinkan saya menceritakan tentang beberapa kali saya mengerjakan scraper dan baru mengetahui bahwa API-nya tersedia, padahal saya tidak repot-repot memeriksanya. Menggunakan API jauh lebih mudah (percayalah) karena API menyediakan data terstruktur.
- Pertimbangan hukum: periksa hukum yang berlaku untuk memastikan Anda tidak melanggar hak kekayaan intelektual atau aturan apa pun. Jika tidak yakin, sebaiknya konsultasikan terlebih dahulu dengan pengacara.
Memulai Web Scraping: Teknik Dasar
Oke, kita sudah selesai membahas teori dan konsep. Sekarang mari mulai bekerja. Hal pertama yang akan Anda pelajari adalah cara mengirim permintaan HTTP.
Mengirim Permintaan HTTP (GET, POST) dengan Pustaka Requests Python
Di sini kita akan menggunakan pustaka Requests di Python. Mari kita lihat contohnya:
import requests url = 'https://example.com' response = requests.get(url) html_content = response.textDi sini Anda menentukan URL halaman yang ingin di-scrape. Dengan requests.get () kita mengirim permintaan GET, dan konten HTML halaman disimpan dalam variabel html_content.
Mengurai HTML dengan BeautifulSoup
Setelah mendapatkan konten HTML, Anda dapat mengurainya menggunakan pustaka BeautifulSoup untuk mengekstrak data tertentu. Berikut contohnya:
from bs4 import BeautifulSoup soup = BeautifulSoup(html_content, 'html.parser') title = soup.find('h1').text paragraphs = soup.find_all('p')Dalam kode ini, kita membuat objek BeautifulSoup dengan meneruskan konten HTML dan menentukan parser (dalam hal ini, ‘html.parser‘). Kemudian, kita dapat menggunakan metode seperti find() dan find_all() untuk menemukan elemen tertentu berdasarkan tag atau atributnya.
Mengekstrak Data Menggunakan Pemilih CSS dan Metode seperti find() dan find_all()
Pemilih CSS menyediakan cara yang ampuh untuk menemukan elemen di halaman web. BeautifulSoup memungkinkan Anda menggunakan pemilih CSS untuk mengekstrak data.
Berikut contohnya:
links = soup.select('a.external-link') for link in links: href = link['href'] text = link.text print(f"Link: {href}, Text: {text}")Dalam kode ini, kita menggunakan metode select() untuk menemukan semua tag dengan kelas “external-link“. Kemudian, kita dapat mengulangi elemen yang dipilih dan mengekstrak atribut atau teks yang diinginkan.
Menyimpan Data Hasil Scraping ke File
Setelah mengekstrak data yang diinginkan, Anda dapat menyimpannya ke file untuk analisis atau pemrosesan lebih lanjut. Berikut contoh menyimpan data ke file CSV:
import csv data = [ ['Name', 'Age', 'City'], ['John', '25', 'New York'], ['Alice', '30', 'London'], ] with open('output.csv', 'w', newline='') as file: writer = csv.writer(file) writer.writerows(data)Dalam kode ini, kita menentukan daftar baris data, membuka file bernama “output.csv” dalam mode tulis, membuat objek penulis CSV, lalu menulis baris data ke file.
Inilah teknik-teknik dasar yang perlu Anda praktikkan. Seiring melanjutkan, Anda akan melihat beberapa kasus yang membuat scraping menjadi sulit, seperti situs web dinamis atau paginasi.
Jangan khawatir, (hampir) semua situs dapat di-scrape jika Anda mengetahui teknik yang tepat dan memiliki alat yang sesuai.
Menangani Paginasi dan Beberapa Halaman
Istilah “paginasi” merujuk pada situs yang membagi kontennya ke beberapa halaman. Jika Anda ingin melakukan scraping data dari semua halaman, Anda harus mengidentifikasi pola paginasi. Dengan begitu, Anda dapat mengubah loop scraping dan mendapatkan hasil.
Periksa teknik-teknik berikut:
- Mengidentifikasi pola paginasi dalam URL: Cari pola dalam struktur URL yang menunjukkan nomor halaman. Misalnya, URL seperti https://example.com/page/1, https://example.com/page/2, dan seterusnya, mengikuti pola paginasi yang jelas.
- Mengubah loop scraping: Sesuaikan loop scraping Anda agar mengiterasi rentang nomor halaman. Misalnya:
for page in range(1, 11): url = f"https://example.com/page/{page}" # Scrape data from each pageDalam kode ini, kita mengiterasi nomor halaman dari 1 hingga 10 dan menyusun URL untuk setiap halaman secara dinamis.
3. Mendeteksi keberadaan tombol “Next”: Beberapa situs web menggunakan tombol “Next” alih-alih nomor halaman yang eksplisit. Dalam kasus seperti ini, Anda dapat memeriksa keberadaan tombol “Next” dan melanjutkan scraping hingga tombol tersebut tidak lagi muncul.
Menangani Situs Web Dinamis dan Rendering JavaScript
Sebagai scraper, Anda pasti akan menjumpai situs web yang sangat interaktif dan kompleks, yang bertujuan meningkatkan pengalaman pengguna. Jenis situs ini sangat mengandalkan JavaScript dan umumnya disebut situs web dengan konten dinamis.
Namun, apa masalahnya? Masalahnya, pada situs-situs ini, kode sumber mungkin tidak memuat data yang diinginkan, sehingga situs tersebut sulit di-scrape.
Inilah saatnya Anda harus menggunakan alat seperti Selenium.
Selenium adalah alat canggih untuk mengotomatiskan peramban web. Alat ini memungkinkan Anda berinteraksi dengan halaman web, mengisi formulir, mengeklik tombol, dan mengekstrak data dari konten yang dirender secara dinamis.
Menyiapkan Selenium
Jika Anda sudah menginstal Selenium, langkah selanjutnya adalah menginstal driver web untuk peramban pilihan Anda. Misalnya, ChromeDriver untuk Google Chrome.
Berikut contoh cara menggunakannya:
from selenium import webdriver driver = webdriver.Chrome() # Mengasumsikan ChromeDriver telah diinstal dan ada di PATH driver.get('https://example.com') # Lakukan tindakan dan ekstrak data title = driver.find_element_by_tag_name('h1').text driver.quit()Dalam kode ini, kita membuat instance driver web Chrome, membuka URL tertentu menggunakan driver.get(), lalu melakukan tindakan dan mengekstrak data menggunakan metode Selenium seperti find_element_by_tag_name().
Menunggu Elemen Dimuat
Pada situs dinamis, konten sering kali tidak dimuat secara bersamaan. Jadi, beberapa elemen mungkin belum tersedia segera setelah halaman dimuat. Anda dapat mengatasinya menggunakan penantian eksplisit dan implisit dari Selenium.
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait(driver, 10)<br>element = wait.until(EC.presence_of_element_located((By.ID, 'my-element-id')))Dalam kode ini, kita membuat objek WebDriverWait dengan batas waktu 10 detik. Lalu, kita menggunakan metode until() untuk menunggu hingga elemen dengan ID tertentu tersedia.
Alternatif untuk Selenium
Meskipun banyak pengguna percaya bahwa Selenium adalah pilihan terbaik untuk situs dinamis, Anda sebaiknya menjelajahi alternatif lain untuk melihat mana yang paling sesuai bagi Anda.
Scrapy-Splash bisa menjadi pilihan. Ini adalah integrasi peramban tanpa kepala dengan framework Scrapy. Integrasi ini memungkinkan ekstraksi data yang lebih efisien berkat infrastruktur jaringan non-blocking Scrapy dan fitur canggih Splash untuk merender halaman web dinamis dengan cepat.
Requests-html adalah alternatif lainnya karena memperluas fungsionalitas pustaka requests dengan menambahkan dukungan untuk rendering JavaScript dan interaksi dengan halaman web.
Teknik Web Scraping Lanjutan
Seiring Anda mulai mengalami kemajuan, Anda akan melihat bahwa beberapa skenario scraping dapat Anda tangani, tetapi Anda juga akan menghadapi kasus yang rumit dan memerlukan teknik yang lebih canggih.
Menangani Autentikasi dan Cookie
Beberapa situs web memerlukan autentikasi atau menggunakan cookie untuk mengelola sesi pengguna. Anda dapat menangani autentikasi dengan mengirimkan kredensial login bersama permintaan dan mengelola cookie menggunakan pustaka seperti requests atau http.cookiejar.
Menghindari Deteksi dan Pemblokiran
Situs web mungkin menerapkan langkah-langkah untuk mendeteksi dan memblokir aktivitas web scraping. Untuk menghindari deteksi, Anda dapat menggunakan teknik seperti merotasi user agent, menggunakan proxy, dan memberikan jeda acak di antara permintaan.
Menyimpan Data di Database
Alih-alih menyimpan data hasil scraping ke file, Anda dapat menyimpannya di database agar penyimpanan dan pengambilan data lebih efisien. Pilihan populer mencakup database SQL seperti MySQL dan PostgreSQL, serta database NoSQL seperti MongoDB.
Melakukan Scraping API dan Menangani Data JSON
Hei! Anda menemukan API-nya. Namun, formatnya JSON. Apa yang bisa Anda lakukan? Anda dapat menggunakan pustaka seperti requests untuk membuat permintaan API dan mengurai respons JSON menggunakan modul json di Python.
Scraping Paralel dan Asinkron
Untuk mempercepat proses scraping, Anda dapat memanfaatkan teknik pemrosesan paralel dan pemrograman asinkron. Pustaka seperti multiprocessing, threading, dan asyncio di Python dapat membantu Anda melakukannya.
Menyatukan Semuanya: Proyek Web Scraping di Dunia Nyata
Sebagai pemula, saat memulai pelatihan scraping, saya merasa benar-benar tahu apa yang harus dilakukan, sampai saya harus melakukannya. Tidak ada gunanya hanya membaca; Anda harus menguji keterampilan dengan berlatih.
Dan, cara apa yang lebih baik selain mengerjakan proyek di dunia nyata?
Mari kita lihat beberapa contoh beserta langkah-langkahnya:
Contoh 1: Scraping Artikel Berita dan Analisis Sentimen
- Merencanakan proses scraping:
- Tentukan situs web berita yang akan di-scrape
- Tentukan struktur artikel (judul, konten, tanggal, dll.)
- Rencanakan format penyimpanan data (misalnya, CSV, basis data)
- Menerapkan scraper:
- Gunakan requests untuk mengambil konten HTML situs web berita
- Parse HTML menggunakan BeautifulSoup untuk mengekstrak informasi artikel
- Tangani pagination dan navigasikan beberapa halaman
- Simpan data hasil scraping dalam format yang dipilih
- Menganalisis dan memvisualisasikan data hasil scraping:
- Lakukan analisis sentimen pada konten artikel menggunakan pustaka seperti NLTK atau TextBlob
- Visualisasikan skor sentimen menggunakan pustaka seperti Matplotlib atau Plotly
- Identifikasi tren dan pola sentimen berita dari waktu ke waktu
Contoh 2: Membuat Alat Pemantauan Harga
- Melakukan scraping informasi produk dari situs web e-commerce:
- Tentukan situs web e-commerce yang akan di-scrape
- Tentukan struktur informasi produk (nama, harga, ketersediaan, dll.)
- Gunakan teknik web scraping untuk mengekstrak data produk dari beberapa situs web
- Menyiapkan peringatan dan notifikasi:
- Tentukan batas harga atau kriteria ketersediaan untuk setiap produk
- Terapkan mekanisme untuk membandingkan harga hasil scraping dengan batas yang ditentukan
- Siapkan notifikasi email atau SMS untuk memberi tahu pengguna saat harga turun atau produk tersedia
- Menerapkan scraper ke cloud:
- Pilih platform cloud (misalnya, AWS, Google Cloud, Heroku)
- Konfigurasikan lingkungan dan dependensi yang diperlukan
- Jadwalkan scraper agar berjalan secara berkala
- Simpan data hasil scraping di basis data berbasis cloud agar mudah diakses dan dipantau
Framework dan Alat Web Scraping
Saya tahu istilah “framework” dan “library” digunakan secara bergantian, tetapi keduanya memiliki arti yang berbeda dan digunakan untuk tujuan yang berbeda.
Dengan library seperti Request atau BeautifulSoup, Anda dapat membuat web scraper dari awal. Namun, framework dapat menyederhanakan proses karena merupakan kumpulan alat dan library.
Begini cara memahaminya: library seperti mobil bertransmisi manual, yang memberi Anda kendali penuh tetapi membutuhkan lebih banyak upaya dan keterampilan untuk mengemudikannya. Sementara itu, framework seperti mobil otomatis; framework menawarkan pengalaman yang lebih mulus dan efisien dengan menyederhanakan banyak aspek scraping yang membosankan.
Beberapa pilihan yang paling populer adalah:
Scrapy
Scrapy adalah framework untuk Python dengan ekosistem lengkap untuk membangun web scraper yang skalabel dan efisien. Fitur utamanya adalah:
- Dirancang agar cepat.
- Tidak perlu menambahkan kode untuk menghasilkan CSV, JSON, dan file lainnya.
- Dukungan XPath dan CSS Selectors.
- Ekosistem ekstensi yang hebat, seperti dukungan untuk middleware.
- Integrasi dengan pipeline item untuk pemrosesan dan penyimpanan data
PySpider
PySpider juga merupakan framework untuk Python, tetapi tidak seperti Scrapy, PySpider kompatibel dengan JavaScript, yang merupakan keunggulan utamanya. Framework ini juga cocok untuk pemula. Fitur utamanya meliputi:
- Dukungan untuk rendering JavaScript menggunakan PhantomJS atau Puppeteer
- Antrean tugas dan penjadwal bawaan
- Integrasi dengan basis data dan antrean pesan
- Mendukung konkurensi
Alat dan Layanan Web Scraping
Selain framework, ada beberapa alat dan layanan yang membantu mempermudah scraping. Bagian terbaiknya adalah alat dan layanan tersebut hanya memerlukan sedikit pemrograman. Beberapa pilihannya adalah:
- Octoparse: Alat web scraping berbasis cloud dengan antarmuka klik-dan-pilih untuk mengekstrak data dari situs web.
- ParseHub: Aplikasi desktop yang memungkinkan Anda membuat web scraper dengan memilih elemen secara visual di halaman web.
- Import.io: Platform berbasis web yang menyediakan alat untuk mengekstrak data dari situs web dan API.
Kesimpulan Dasar-Dasar Web Scraping
Dalam panduan ini, kita membahas dasar-dasar web scraping secara umum, seperti memahami struktur situs web, pertimbangan etis, teknik dasar dan lanjutan, serta alat dan framework tambahan.
Anda siap untuk memulai, tetapi pertimbangkan untuk memperluas pengetahuan dengan membaca sumber tambahan, seperti dokumentasi resmi library dan framework, serta tutorial web scraping.
Selain itu, cobalah meminta panduan dari scraper berpengalaman di komunitas dan forum scraping. Jangan mengasingkan diri, karena kita saling membutuhkan.
Kita semua pernah menjadi pemula, jadi bersikaplah baik kepada diri sendiri, mulailah dari yang kecil, dan berlatihlah secara rutin. Dengan latihan dan dedikasi yang cukup, Anda akan melihat bahwa Anda mampu menangani proyek yang lebih kompleks seiring kemajuan Anda.
