Ekosistem Python yang luas mempunyai pelbagai pustaka yang menjadikan pengikisan web sebagai tugas yang mudah, dan lxml sememangnya salah satu pilihan utama. Tutorial ini bertujuan untuk menyediakan panduan lengkap tentang sebab lxml ialah pilihan terbaik untuk mengikis web, langkah-langkah untuk membina pengikis lxml yang teguh dan contoh praktikal untuk membantu anda bermula. Tutorial ini juga menggabungkan cerapan berharga untuk memastikan bilangan maksimum permintaan yang berjaya semasa mengikis web.
Pengenalan kepada Web Scraping dengan lxml dalam Python
Pengikisan web menggunakan lxml Python melibatkan pengekstrakan dan penstrukturan data daripada kod HTML atau XML yang dimuat turun. Tidak seperti sesetengah perpustakaan yang mengendalikan kedua-dua muat turun dan penghuraian, lxml mengkhususkan diri dalam penghuraian. Untuk memuat turun halaman web, anda biasanya menggunakan klien HTTP seperti Permintaan. Setelah data HTML atau XML dimuat turun, lxml kemudiannya boleh menghuraikan data ini, membolehkan anda mengakses elemen dan atribut tertentu dengan berkesan.
Mengapa Pilih lxml Python untuk Mengikis Web?
Memilih lxml untuk projek mengikis web anda datang dengan beberapa faedah:
Kelebihan:
- Kebolehlanjutan: Dibina di atas perpustakaan C libxml2 dan libxslt, lxml sangat boleh dikembangkan dan menawarkan faedah kelajuan perpustakaan C asli bersama-sama dengan kesederhanaan Python.
- Struktur XML: Menyokong tiga bahasa skema untuk menentukan struktur XML dan melaksanakan sepenuhnya XPath, menjadikannya sangat berkuasa untuk menavigasi elemen dalam dokumen XML.
- Traversal Data: Mampu merentasi pelbagai struktur XML dan HTML, membenarkan navigasi melalui kanak-kanak, adik-beradik dan elemen lain. Ciri ini memberikannya kelebihan berbanding parser lain seperti BeautifulSoup.
- Kecekapan Sumber: Menggunakan kurang memori berbanding perpustakaan lain, menjadikannya sangat cekap untuk menghuraikan set data yang besar.
Walau bagaimanapun, lxml bukanlah pilihan terbaik untuk menghuraikan HTML yang ditulis dengan buruk atau rosak. Dalam kes sedemikian, anda boleh menggunakan BeautifulSoup sebagai pilihan sandaran.
Langkah-langkah untuk Membina Penghurai lxml yang Teguh dalam Python
Langkah 1: Pilih Alat yang Sesuai
Sebelum anda mula mengikis, anda perlu memilih set alat yang betul. Untuk klien HTTP, Python menawarkan perpustakaan seperti Requests
, HTTPX
, dan aiohttp
. Jika sasaran anda ialah tapak web dinamik yang bergantung pada JavaScript, anda juga mungkin memerlukan penyemak imbas tanpa kepala seperti Selenium.
Langkah 2: Kenal pasti Halaman Web Sasaran Anda
Selepas menyediakan alatan anda, kenal pasti halaman web yang ingin anda kikis. Pastikan anda membaca laman web robots.txt
untuk mengetahui peraturan untuk mengikis web di tapak tersebut.
Langkah 3: Fahami Garis Panduan Mengikis Web
Memahami amalan terbaik mengikis web dan kemungkinan sekatan jalan seperti CAPTCHA atau larangan IP adalah penting. Dalam kes di mana anda menjangkakan isu sedemikian, menggunakan pelayan proksi berputar boleh memberi manfaat.
Langkah 4: Menyediakan Pengepala
Pengepala HTTP membantu dalam meniru gelagat pengguna sebenar. Sediakan ini dengan betul untuk memastikan pengikis anda tidak tersekat.
Mengikis Web dengan lxml Python: Tutorial Langkah Demi Langkah
Prasyarat
Sebelum memulakan, anda memerlukan yang berikut:
- Python 3.x: Pastikan Python 3.x dipasang pada sistem anda. Anda boleh memuat turun dari Laman web rasmi Python.
- Editor Kod: Mana-mana editor teks yang menyokong Python akan berjaya, walaupun IDE lanjutan seperti Visual Studio Code, Notepad++, atau PyCharm boleh menawarkan lebih banyak fungsi seperti penyahpepijatan, penyerlahan sintaks dan pelengkapan automatik.
- Permintaan dan perpustakaan lxml: Ini adalah perpustakaan Python pihak ketiga yang digunakan untuk permintaan HTTP dan penghuraian HTML, masing-masing. Untuk memasang, buka terminal anda dan jalankan:
pip install requests lxml
1. Sediakan Persekitaran Pembangunan Anda
Penjelasan:
Dalam langkah ini, anda menyediakan persekitaran pengekodan anda untuk pembangunan. Pilih lokasi pada komputer anda di mana anda ingin menyimpan skrip anda.
- Mencipta Fail Python: Buka editor kod anda dan buat fail Python baharu bernama
imdb_scraper.py
.
2. Mengambil Kandungan Halaman Web
Kod:
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:
Dalam bahagian ini, anda mengambil kandungan HTML halaman filem paling popular IMDb.
- Mengimport
requests
: Therequests
perpustakaan digunakan untuk membuat permintaan HTTP. - Mengambil Kandungan:
requests.get(url)
mengambil kandungan halaman web dan menyimpannya dalamresponse
pembolehubah. - Semakan Kod Status: Amalan yang baik untuk menyemak kod status HTTP (200 bermaksud OK). Jika bukan 200, terdapat masalah untuk mengambil halaman.
3. Menghuraikan Halaman Web
Kod:
from lxml import html
tree = html.fromstring(page_content)
Penjelasan:
Di sini anda menukar kandungan HTML yang diambil kepada struktur pokok yang boleh dicari.
- Mengimport
lxml.html
: Modul ini membantu untuk mencipta struktur pokok daripada kandungan HTML. - Mencipta Struktur Pokok:
html.fromstring(page_content)
menghuraikan kandungan HTML yang disimpanpage_content
dan menjana struktur seperti pokok yang anda simpan dalam pembolehubahtree
.
4. Mengekstrak Data
Kod:
movie_titles = tree.xpath('//td[@class="titleColumn"]/a/text()')
imdb_ratings = tree.xpath('//td[@class="imdbRating"]/strong/text()')
Penjelasan:
Memandangkan anda mempunyai struktur halaman web seperti pokok, anda boleh mencari dan mengekstrak data daripadanya.
- Menggunakan XPath: XPath ialah bahasa pertanyaan yang boleh menavigasi melalui dokumen XML. Anda menggunakannya di sini untuk menentukan elemen dan atribut yang ingin anda kikis.
- Mengekstrak Tajuk dan Penilaian: Anda mengumpul tajuk filem dan penilaian IMDb menggunakan pertanyaan XPath yang menentukan lokasinya dalam struktur HTML.
5. Menyimpan Data
Kod:
for title, rating in zip(movie_titles, imdb_ratings):
print(f"Movie: {title}, Rating: {rating}")
Penjelasan:
Akhir sekali, anda perlu menyimpan atau memaparkan data yang dikikis.
- Mengezip Senarai: The
zip
fungsi memasangkan setiap tajuk filem dengan rating yang sepadan. - Mencetak Data: Dalam contoh ini, kami hanya mencetak setiap pasangan. Dalam aplikasi dunia sebenar, anda mungkin mahu menyimpan data ini dalam pangkalan data atau fail.
Contoh Kod Penuh
# 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 lanjutan dan terperinci ini, anda seharusnya dapat mengikis maklumat tentang filem paling popular daripada IMDb dengan yakin. Seperti biasa, adalah penting untuk menghormati syarat perkhidmatan mana-mana tapak web yang anda cari.
Ucapan Akhir
Pengikisan web boleh menjadi proses yang rumit, tetapi perpustakaan lxml Python memudahkan banyak kerumitan. Dengan alatan yang betul, pengetahuan tentang amalan terbaik dan strategi yang jelas, anda boleh menjadikan usaha mengikis web anda cekap dan berjaya. Tutorial ini bertujuan untuk merangkumi aspek-aspek ini secara menyeluruh. Selamat mengikis!