Ekosistem Python yang luas memiliki segudang perpustakaan yang membuat web scraping menjadi tugas yang mudah, dan lxml tentunya merupakan salah satu pilihan utama. Tutorial ini bertujuan untuk memberikan panduan lengkap tentang mengapa lxml adalah pilihan terbaik untuk web scraping, langkah-langkah untuk membuat lxml scraper yang tangguh, dan contoh praktis untuk membantu Anda memulai. Tutorial ini juga menggabungkan wawasan berharga untuk memastikan jumlah maksimum permintaan yang berhasil selama web scraping.
Pengantar Web Scraping dengan lxml dengan Python
Pengikisan web menggunakan lxml Python melibatkan ekstraksi dan penataan data dari kode HTML atau XML yang diunduh. Tidak seperti beberapa perpustakaan yang menangani pengunduhan dan penguraian, lxml berspesialisasi dalam penguraian. Untuk mengunduh halaman web, Anda biasanya menggunakan klien HTTP seperti Permintaan. Setelah data HTML atau XML diunduh, lxml kemudian dapat mengurai data ini, memungkinkan Anda mengakses elemen dan atribut tertentu secara efektif.
Mengapa Memilih lxml Python untuk Web Scraping?
Memilih lxml untuk proyek pengikisan web Anda memiliki beberapa manfaat:
Keuntungan:
- Kemungkinan diperpanjang: Dibangun di atas pustaka C libxml2 dan libxslt, lxml sangat dapat diperluas dan menawarkan keunggulan kecepatan pustaka C asli serta kesederhanaan Python.
- Struktur XML: Mendukung tiga bahasa skema untuk menentukan struktur XML dan mengimplementasikan XPath sepenuhnya, menjadikannya sangat kuat untuk menavigasi elemen dalam dokumen XML.
- Penjelajahan Data: Mampu melintasi berbagai struktur XML dan HTML, memungkinkan navigasi melalui anak, saudara, dan elemen lainnya. Fitur ini memberikan keunggulan dibandingkan parser lain seperti BeautifulSoup.
- Efisiensi sumber daya: Mengkonsumsi lebih sedikit memori dibandingkan perpustakaan lain, sehingga sangat efisien untuk mengurai kumpulan data besar.
Namun, lxml tidak selalu merupakan pilihan terbaik untuk mengurai HTML yang ditulis dengan buruk atau rusak. Dalam kasus seperti itu, Anda dapat menggunakan BeautifulSoup sebagai opsi cadangan.
Langkah-langkah Membuat Parser lxml yang Kuat dengan Python
Langkah 1: Pilih Alat yang Sesuai
Sebelum Anda mulai mengikis, Anda harus memilih seperangkat alat yang tepat. Untuk klien HTTP, Python menawarkan perpustakaan seperti Requests
, HTTPX
, Dan aiohttp
. Jika target Anda adalah situs web dinamis yang mengandalkan JavaScript, Anda mungkin juga memerlukan browser tanpa kepala seperti Selenium.
Langkah 2: Identifikasi Halaman Web Target Anda
Setelah menyiapkan alat Anda, identifikasi halaman web yang ingin Anda kikis. Pastikan untuk membaca situs webnya robots.txt
untuk mengetahui aturan web scraping pada situs tersebut.
Langkah 3: Pahami Pedoman Pengikisan Web
Memahami praktik terbaik web scraping dan potensi hambatan seperti CAPTCHA atau larangan IP sangatlah penting. Jika Anda mengantisipasi masalah seperti itu, menggunakan server proxy yang berputar dapat bermanfaat.
Langkah 4: Menyiapkan Header
Header HTTP membantu meniru perilaku pengguna sebenarnya. Atur ini dengan benar untuk memastikan scraper Anda tidak diblokir.
Pengikisan Web dengan lxml Python: Tutorial Langkah-demi-Langkah
Prasyarat
Sebelum memulai, Anda memerlukan yang berikut ini:
- Python 3.x: Pastikan Python 3.x diinstal pada sistem Anda. Anda dapat mengunduhnya dari Situs web resmi Python.
- Editor Kode: Editor teks apa pun yang mendukung Python dapat digunakan, meskipun IDE tingkat lanjut seperti Visual Studio Code, Notepad++, atau PyCharm dapat menawarkan lebih banyak fungsi seperti debugging, penyorotan sintaksis, dan pelengkapan otomatis.
- Permintaan dan perpustakaan lxml: Ini adalah pustaka Python pihak ketiga yang masing-masing digunakan untuk permintaan HTTP dan penguraian HTML. Untuk memasang, buka terminal Anda dan jalankan:
pip install requests lxml
1. Menyiapkan Lingkungan Pengembangan Anda
Penjelasan:
Pada langkah ini, Anda mempersiapkan lingkungan pengkodean untuk pengembangan. Pilih lokasi di komputer tempat Anda ingin menyimpan skrip.
- Membuat File Python: Buka editor kode Anda dan buat file Python baru bernama
imdb_scraper.py
.
2. Mengambil Konten Halaman Web
Kode:
import requests
url = "https://www.imdb.com/chart/moviemeter/"
response = requests.get(url)
if response.status_code == 200:
page_content = response.text
else:
print("Failed to retrieve the page")
Penjelasan:
Di bagian ini, Anda mengambil konten HTML dari halaman film paling populer di IMDb.
- Pengimporan
requests
: Iturequests
perpustakaan digunakan untuk membuat permintaan HTTP. - Mengambil Konten:
requests.get(url)
mengambil konten halaman web dan menyimpannya diresponse
variabel. - Pemeriksaan Kode Status: Merupakan praktik yang baik untuk memeriksa kode status HTTP (200 berarti OK). Jika bukan 200, ada masalah saat mengambil halaman tersebut.
3. Mengurai Halaman Web
Kode:
from lxml import html
tree = html.fromstring(page_content)
Penjelasan:
Di sini Anda mengonversi konten HTML yang diambil menjadi struktur pohon yang dapat dicari.
- Pengimporan
lxml.html
: Modul ini membantu membuat struktur pohon dari konten HTML. - Membuat Struktur Pohon:
html.fromstring(page_content)
mem-parsing konten HTML yang disimpan di dalamnyapage_content
dan menghasilkan struktur seperti pohon yang Anda simpan dalam variabeltree
.
4. Mengekstraksi Data
Kode:
movie_titles = tree.xpath('//td[@class="titleColumn"]/a/text()')
imdb_ratings = tree.xpath('//td[@class="imdbRating"]/strong/text()')
Penjelasan:
Sekarang Anda memiliki struktur halaman web seperti pohon, Anda dapat mencari dan mengekstrak data darinya.
- Menggunakan XPath: XPath adalah bahasa kueri yang dapat menavigasi dokumen XML. Anda menggunakannya di sini untuk menentukan elemen dan atribut yang ingin Anda kikis.
- Mengekstraksi Judul dan Peringkat: Anda mengumpulkan judul film dan peringkat IMDb menggunakan kueri XPath yang menunjukkan lokasinya dalam struktur HTML.
5. Menyimpan Data
Kode:
for title, rating in zip(movie_titles, imdb_ratings):
print(f"Movie: {title}, Rating: {rating}")
Penjelasan:
Terakhir, Anda ingin menyimpan atau menampilkan data yang tergores.
- Daftar Zip: Itu
zip
fungsi memasangkan setiap judul film dengan rating yang sesuai. - Mencetak Data: Dalam contoh ini, kami cukup mencetak setiap pasangan. Dalam aplikasi dunia nyata, Anda mungkin ingin menyimpan data ini dalam database atau file.
Contoh Kode Lengkap
# Importing required libraries
import requests
from lxml import html
# Step 2: Fetch Web Page Content
url = "https://www.imdb.com/chart/moviemeter/"
response = requests.get(url)
if response.status_code == 200:
page_content = response.text
else:
print("Failed to retrieve the page")
# Step 3: Parse the Web Page
tree = html.fromstring(page_content)
# Step 4: Extract Data
movie_titles = tree.xpath('//td[@class="titleColumn"]/a/text()')
imdb_ratings = tree.xpath('//td[@class="imdbRating"]/strong/text()')
# Step 5: Store and/or Output Data
for title, rating in zip(movie_titles, imdb_ratings):
print(f"Movie: {title}, Rating: {rating}")
Dengan mengikuti tutorial yang panjang dan mendetail ini, Anda akan dapat dengan percaya diri mengumpulkan informasi tentang film terpopuler dari IMDb. Seperti biasa, sangat penting untuk menghormati persyaratan layanan situs web mana pun yang Anda buat.
Catatan Akhir
Pengikisan web bisa menjadi proses yang rumit, tetapi pustaka lxml Python menyederhanakan banyak kerumitan. Dengan alat yang tepat, pengetahuan tentang praktik terbaik, dan strategi yang jelas, Anda dapat menjadikan upaya web scraping Anda efisien dan sukses. Tutorial ini bertujuan untuk mencakup aspek-aspek ini secara komprehensif. Selamat menggores!