Apakah mempelajari cara melakukan web scraping merupakan ide yang bagus? Jika Anda ingin menghemat ratusan jam kerja, maka Anda harus melakukannya. Selain itu, ini merupakan keterampilan yang bagus untuk dimiliki sebagai seorang programmer.
Pengikisan web adalah proses pengambilan data dari situs web, dan karena data tersedia di mana-mana, Anda bisa mendapatkan dan memprosesnya secara efektif dengan menguasai teknik dasar dan lanjutan.
Kami telah menyiapkan panduan untuk pemula yang mencakup semua hal penting, mulai dari memahami struktur situs web, mempelajari teknik dasar hingga konsep pengikisan web tingkat lanjut, sehingga Anda bisa menjadi seorang profesional.
Memahami Struktur Situs Web
Sebelum menyelami scraping, Anda perlu memahami bagaimana situs web disusun.
Pertama, situs web dibangun 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 mendefinisikan struktur dan konten halaman web menggunakan elemen-elemen yang diwakili oleh tag.
Misalnya,
- <h1> untuk judul,
- <p> untuk paragraf,
untuk menyebutkan beberapa (dan ada BANYAK).
Berikut ini 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 mendefinisikan gaya elemen HTML, sementara JavaScript bertanggung jawab atas perilaku dinamis situs web.
Alat pengikisan yang akan kita gunakan akan menavigasi halaman menggunakan strukturnya, dan akan mengidentifikasi konten yang akan diekstrak. Situs dengan struktur yang lebih terorganisasi dan deskriptif cenderung lebih mudah dikikis. Dan sebagai pemula, Anda pasti menghargainya, bukan?
Menyiapkan Lingkungan Pengembangan Anda
Baiklah, sekarang setelah Anda memiliki gambaran tentang struktur situs web, Anda dapat mulai menyiapkan lingkungan pengembangan Anda.
Pertama, Anda perlu memilih bahasa pemrograman, karena tidak semuanya cocok untuk tugas ini. Python adalah pilihan paling populer untuk scraping karena tingkatnya yang tinggi, mudah digunakan, dan juga memiliki pustaka, kerangka kerja, dan alat bawaan yang hebat.
Ini memungkinkan untuk menyelesaikan tugas tertentu yang terkait dengan pengikisan, seperti berikut ini:
- Requests: memudahkan pembuatan permintaan HTTP ke situs web target.
- BeautifulSoup: pustaka ini digunakan untuk mengurai dokumen HTML dan XML. Tapi, tunggu sebentar, apa itu penguraian? Ini adalah proses menganalisis dan menginterpretasi data terstruktur.
- Selenium: untuk mengotomatiskan peramban web guna menjalankan tugas yang mensimulasikan interaksi manusia.
- Scrapy: kerangka kerja komprehensif ini dapat digunakan untuk berbagai tugas, seperti perayapan web (mencari URL untuk mengekstrak data), penambangan data, dan pengujian otomatis.
Bagaimana Memulai?
- Pengaturan lingkungan: unduh versi terbaru Python dan instal. Semudah itu.
- Siapkan lingkungan virtual: Buat lingkungan virtual untuk menjaga ketergantungan 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 Windows
3. Instal pustaka dan alat: Saya sarankan Anda menginstal Requests, Selenium, BeautifulSoup, dan Scrapy untuk memulai. Anda dapat menginstalnya menggunakan “pip install” perintah, cukup buka terminal dan jalankan yang berikut ini:
pip install requests beautifulsoup4 scrapy selenium
Web Scraping 101: Etika dan Praktik Terbaik
Tunggu dulu. Sebelum menyelami aspek teknis, mari kita bahas implikasi etis dan praktik terbaik dari web scraping.
Setiap scraper agaknya mengetahui hal ini, tetapi pemula perlu memahami pedoman berikut ini agar Anda dapat tetap berada dalam batasan:
- Hargai Robots.txt: Aturan pertama dalam scraping adalah Anda harus menghargai Robots.txt. Ini adalah berkas teks yang dimiliki setiap situs yang pada dasarnya memberi tahu semua orang apa yang dapat dan tidak dapat Anda scraping.
- Hargai ketentuan layanan situs: periksa ketentuan layanan situs untuk melihat apakah pengikisan web diizinkan.
- Batasi frekuensi pengikisan dan dampaknya pada server: Hindari membuat terlalu banyak permintaan dalam waktu singkat. Hindari juga membebani server dengan menerapkan penundaan antarpermintaan.
- Gunakan API (jika tersedia): sebelum melakukan scraping, periksa apakah situs tersebut menyediakan API untuk mengakses data. Saya pernah mencoba scraping dan menemukan bahwa API tersedia, tetapi saya tidak sempat memeriksanya. Menggunakan API jauh lebih mudah (percayalah) karena menyediakan data terstruktur.
- Pertimbangan hukum: periksa undang-undang untuk memastikan Anda tidak melanggar hak kekayaan intelektual atau melanggar aturan apa pun. Jika Anda tidak yakin, sebaiknya Anda berkonsultasi dengan pengacara terlebih dahulu.
Memulai Web Scraping: Teknik Dasar
Baiklah, kita sudah selesai dengan teori dan konsep, mari kita mulai bekerja. Hal pertama yang akan Anda pelajari adalah cara mengirim permintaan HTTP.
Mengirim Permintaan HTTP (GET, POST) dengan Pustaka Permintaan Python
Di sini kita akan menggunakan pustaka Requests dalam Python. Mari kita lihat contohnya:
import requests
url = 'https://example.com'
response = requests.get(url)
html_content = response.text
Di sini Anda menentukan URL halaman yang ingin Anda sembunyikan. Dengan requests.get () kami mengirimkan permintaan GET dan konten HTML halaman disimpan dalam variabel html_content.
Parsing HTML dengan BeautifulSoup
Setelah Anda memiliki konten HTML, Anda dapat menguraikannya 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 kasus ini, 'html.parser'). Kita kemudian 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 pada halaman web. BeautifulSoup memungkinkan Anda menggunakan pemilih CSS untuk mengekstrak data.
Berikut ini 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 select() metode untuk menemukan semua tag dengan kelas “external-link“Kita kemudian dapat mengulangi elemen yang dipilih dan mengekstrak atribut atau teks yang diinginkan.
Menyimpan Data yang Diambil ke dalam File
Setelah mengekstrak data yang diinginkan, Anda dapat menyimpannya ke dalam file untuk analisis atau pemrosesan lebih lanjut. Berikut ini contoh penyimpanan data ke dalam 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 mendefinisikan daftar baris data, buka file bernama “output.csv” dalam mode tulis, buat objek penulis CSV, dan tulis baris data ke file.
Ini adalah teknik dasar yang harus Anda praktikkan. Saat Anda mempelajarinya lebih lanjut, Anda akan melihat ada beberapa kasus di mana pengikisan menjadi sulit, seperti situs web dinamis atau pagination.
Jangan khawatir, (hampir) setiap situs dapat di-scraping jika Anda mengetahui teknik yang tepat dan memiliki alat yang tepat.
Menangani Paginasi dan Beberapa Halaman
Istilah “paginasi” mengacu pada situs yang membagi kontennya ke beberapa halaman. Jika Anda ingin mengambil data dari semua halaman, Anda harus mengidentifikasi pola pagination. Dengan cara ini, Anda dapat memodifikasi loop pengikisan dan mendapatkan hasil.
Periksa teknik berikut ini:
- Mengidentifikasi pola pagination di URL: Cari pola dalam struktur URL yang menunjukkan nomor halaman. Misalnya, URL seperti https://example.com/page/1, https://example.com/page/2, dsb., mengikuti pola paginasi yang jelas.
- Memodifikasi loop pengikisan: Sesuaikan loop pengikisan Anda untuk mengulangi rentang nomor halaman. Misalnya:
for page in range(1, 11):
url = f"https://example.com/page/{page}"
# Scrape data from each page
Dalam kode ini, kami mengulangi nomor halaman dari 1 hingga 10 dan menyusun URL untuk setiap halaman secara dinamis.
3. Mendeteksi keberadaan “Next” tombol: Beberapa situs web menggunakan “Next” alih-alih nomor halaman yang eksplisit. Dalam kasus seperti itu, Anda dapat memeriksa keberadaan tombol “Next” dan teruskan mengikis hingga menghilang.
Berurusan dengan Situs Web Dinamis dan Rendering JavaScript
Sebagai seorang scraper, Anda pasti akan menemukan situs web yang sangat interaktif dan kompleks, dengan tujuan untuk meningkatkan pengalaman pengguna. Jenis situs ini sangat bergantung pada JavaScript dan umumnya disebut situs web dengan konten dinamis.
Namun, apa yang membuat hal ini menjadi masalah? Masalahnya adalah bahwa di situs-situs ini, kode sumber mungkin tidak berisi data yang diinginkan, dan ini menjadi tantangan dalam proses scraping.
Di sinilah Anda harus menggunakan alat seperti Selenium.
Selenium adalah alat yang hebat untuk mengotomatiskan peramban web. Alat ini memungkinkan Anda berinteraksi dengan halaman web, mengisi formulir, mengklik tombol, dan mengekstrak data dari konten yang ditampilkan secara dinamis.
Menyiapkan Selenium
Jika Anda sudah memasang Selenium, hal berikutnya yang harus Anda lakukan adalah memasang driver web untuk peramban pilihan Anda. Misalnya, ChromeDriver untuk Google Chrome.
Berikut contoh cara penggunaannya:
from selenium import webdriver
driver = webdriver.Chrome() # Assumes ChromeDriver is installed and in PATH
driver.get('https://example.com')
# Perform actions and extract data
title = driver.find_element_by_tag_name('h1').text
driver.quit()
Dalam kode ini, kita membuat contoh driver web Chrome, menavigasi ke URL tertentu menggunakan driver.get(), lalu melakukan tindakan dan mengekstrak data menggunakan metode Selenium seperti find_element_by_tag_name().
Menunggu Elemen untuk Dimuat
Di situs dinamis, konten sering kali tidak dimuat pada saat yang bersamaan. Jadi, beberapa elemen mungkin tidak langsung tersedia saat halaman dimuat. Anda dapat mengatasinya menggunakan penantian eksplisit dan implisit 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. Kemudian kita menggunakan metode until() untuk menunggu kehadiran elemen dengan ID tertentu.
Alternatif untuk Selenium
Meskipun banyak pengguna percaya bahwa Selenium adalah yang terbaik yang dapat digunakan untuk situs dinamis, Anda harus mencari alternatif lain untuk melihat mana yang paling cocok untuk Anda.
Scrapy-Splash bisa menjadi pilihan. Ini adalah integrasi browser tanpa kepala dengan kerangka kerja Scrapy. Ini memungkinkan ekstraksi data lebih efisien karena infrastruktur jaringan Scrapy yang tidak memblokir dan fitur-fitur canggih Splash untuk merender halaman web dinamis dengan cepat.
Requests-html adalah alternatif lain, karena memperluas fungsionalitas pustaka permintaan dengan menambahkan dukungan untuk rendering JavaScript dan interaksi dengan halaman web.
Teknik Scraping Web Tingkat Lanjut
Saat Anda mulai membuat kemajuan, Anda akan melihat bahwa Anda menangani beberapa skenario pengikisan, tetapi Anda juga menghadapi skenario rumit yang memerlukan teknik yang lebih maju.
Penanganan Autentikasi dan Cookie
Beberapa situs web memerlukan autentikasi atau menggunakan cookie untuk mengelola sesi pengguna. Anda dapat menangani autentikasi dengan mengirimkan kredensial login dengan permintaan Anda dan mengelola cookie menggunakan pustaka seperti requests atau http://cookiejar.com/.
Menghindari Deteksi dan Larangan
Situs web dapat menggunakan berbagai tindakan untuk mendeteksi dan memblokir aktivitas web scraping. Untuk menghindari deteksi, Anda dapat menggunakan berbagai teknik seperti merotasi agen pengguna, menggunakan proxy, dan memperkenalkan penundaan acak di antara permintaan.
Menyimpan Data dalam Basis Data
Alih-alih menyimpan data hasil scraping ke dalam file, Anda dapat menyimpannya dalam database untuk penyimpanan dan pengambilan yang lebih efisien. Pilihan yang populer meliputi database SQL seperti MySQL dan PostgreSQL, dan database NoSQL seperti MongoDB.
Mengikis API dan Menangani Data JSON
Hai! Anda menemukan API-nya. Namun, API tersebut dalam format JSON. Apa yang dapat 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 pemrosesan paralel dan teknik pemrograman asinkron. Pustaka seperti multiprocessing, threading, dan asyncio dalam Python dapat membantu Anda mencapainya.
Menyatukan Semuanya: Proyek Pengikisan Web di Dunia Nyata
Sebagai seorang pemula, ketika saya memulai pelatihan scraping, saya merasa sudah benar-benar tahu apa yang harus saya lakukan, sampai akhirnya saya harus melakukannya. Tidak ada gunanya hanya membaca, Anda harus menguji keterampilan Anda dengan berlatih.
Dan, apa cara yang lebih baik untuk melakukannya selain mengerjakan proyek dunia nyata?
Mari kita lihat beberapa contoh beserta proses langkah demi langkahnya:
Contoh 1: Mengumpulkan Artikel Berita dan Analisis Sentimen
- Merencanakan proses pengikisan:
- Identifikasi situs web berita untuk mengikis
- Tentukan struktur artikel (judul, konten, tanggal, dll.)
- Rencanakan format penyimpanan data (misalnya, CSV, database)
- Menerapkan scraper:
- Gunakan permintaan untuk mengambil konten HTML dari situs web berita
- Parsing HTML menggunakan BeautifulSoup untuk mengekstrak informasi artikel
- Menangani pagination dan menavigasi melalui beberapa halaman
- Simpan data yang diambil dalam format yang dipilih
- Menganalisis dan memvisualisasikan data yang dikikis:
- Lakukan analisis sentimen pada konten artikel menggunakan pustaka seperti NLTK atau TextBlob
- Visualisasikan skor sentimen menggunakan pustaka seperti Matplotlib atau Plotly
- Mengidentifikasi tren dan pola dalam sentimen berita dari waktu ke waktu
Contoh 2: Membangun Alat Pemantauan Harga
- Mengikis informasi produk dari situs web e-commerce:
- Identifikasi situs web e-commerce untuk melakukan scraping
- Tentukan struktur informasi produk (nama, harga, ketersediaan, dll.)
- Gunakan teknik pengikisan web untuk mengekstrak data produk dari beberapa situs web
- Menyiapkan peringatan dan notifikasi:
- Tentukan ambang harga atau kriteria ketersediaan untuk setiap produk
- Terapkan mekanisme untuk membandingkan harga yang diambil dengan ambang batas yang ditentukan
- Siapkan pemberitahuan email atau SMS untuk memberi tahu pengguna saat harga turun atau produk tersedia
- Menyebarkan scraper ke cloud:
- Pilih platform cloud (misalnya, AWS, Google Cloud, Heroku)
- Konfigurasikan lingkungan dan dependensi yang diperlukan
- Jadwalkan scraper untuk berjalan secara berkala
- Simpan data yang diambil dalam database berbasis cloud untuk memudahkan akses dan pemantauan
Kerangka Kerja dan Alat Pengikisan Web
Saya tahu bahwa istilah “kerangka kerja” dan “perpustakaan” digunakan secara bergantian, tetapi keduanya memiliki arti yang berbeda, dan digunakan untuk tujuan yang berbeda.
Dengan pustaka seperti Request atau BeautifulSoup, Anda dapat membuat web scraper dari awal. Namun, dengan framework, Anda dapat menyederhanakan prosesnya karena framework merupakan kumpulan alat dan pustaka.
Mari kita lihat dari sudut pandang ini, pustaka seperti mobil dengan penggerak manual, yang memberi Anda kendali penuh tetapi membutuhkan lebih banyak upaya dan keterampilan untuk menavigasinya. Sementara itu, kerangka kerja seperti mobil otomatis; kerangka kerja menawarkan pengalaman yang lebih lancar dan lebih efisien dengan menyederhanakan banyak aspek yang membosankan dari scraping.
Beberapa pilihan yang paling populer adalah:
Scrapy
Scrapy adalah framework untuk Python dengan ekosistem lengkap untuk membangun web scraper yang dapat diskalakan dan efisien. Fitur-fitur utamanya adalah:
- Cepat sesuai desain.
- Tidak perlu menambahkan kode untuk menghasilkan file CSV, JSON, dan file lainnya.
- Dukungan XPath dan Pemilih CSS.
- Ekosistem ekstensi yang hebat, seperti dukungan untuk middleware.
- Integrasi dengan alur item untuk pemrosesan dan penyimpanan data
PySpider
PySpider juga merupakan framework untuk Python, tetapi tidak seperti Scrapy, framework ini kompatibel dengan JavaScript, yang merupakan fitur yang lebih kuat. Framework ini juga bagus untuk pemula. Fitur-fitur utamanya meliputi:
- Dukungan untuk rendering JavaScript menggunakan PhantomJS atau Puppeteer
- Antrean tugas dan penjadwal bawaan
- Integrasi dengan database dan antrian pesan
- Mendukung konkurensi
Alat dan Layanan Pengikisan Web
Selain kerangka kerja, ada beberapa alat dan layanan yang membantu Anda mempermudah pengikisan. Bagian terbaiknya adalah alat dan layanan tersebut memerlukan pengodean yang minimal. Beberapa pilihannya adalah:
- Octoparse: Alat pengikisan web berbasis awan dengan antarmuka tunjuk dan klik untuk mengekstrak data dari situs web.
- ParseHub: Aplikasi desktop yang memungkinkan Anda membuat web scraper dengan memilih elemen secara visual pada halaman web.
- Import.io: Platform berbasis web yang menyediakan alat untuk mengekstrak data dari situs web dan API.
Merangkum Dasar-Dasar Pengikisan Web
Dalam panduan ini, kami membahas secara umum dasar-dasar web scraping, seperti memahami struktur situs web, pertimbangan etika, teknik dasar dan lanjutan, serta alat dan kerangka kerja tambahan.
Anda siap untuk memulai, tetapi pertimbangkan untuk memperluas pengetahuan Anda dengan membaca sumber daya tambahan, seperti dokumentasi resmi pustaka dan kerangka kerja, serta tutorial pengikisan web.
Cobalah untuk mencari bimbingan dari scraper berpengalaman di komunitas dan forum scraping. Jangan mengisolasi diri, karena kita saling membutuhkan.
Kita semua pernah menjadi pemula, jadi bersikaplah lembut pada diri sendiri, mulailah dari hal kecil dan berlatihlah secara teratur. Dengan latihan dan dedikasi yang cukup, Anda akan melihat bagaimana Anda akan mampu menangani proyek yang lebih rumit seiring kemajuan Anda.