Pengikisan web adalah salah satu metode pengumpulan data terbaik untuk mengumpulkan data dan membuat kumpulan data khusus di atasnya.
Memiliki kumpulan data berkualitas tinggi sangat penting di era pengambilan keputusan berbasis data ini. Meskipun ada banyak kumpulan data yang tersedia untuk umum, terkadang Anda mungkin perlu membuat kumpulan data khusus yang memenuhi kebutuhan spesifik Anda. Pengikisan web memungkinkan Anda mengekstrak data dari situs web. Anda kemudian dapat menggunakan data ini untuk membuat kumpulan data khusus Anda.
Gambaran Umum Metode Pengumpulan Data
Ada berbagai metode pengumpulan data. Mereka termasuk entri data manual, API, kumpulan data publik, dan web scraping. Setiap metode memiliki kelebihan dan keterbatasan.
Entri data manual memakan waktu dan rentan terhadap kesalahan manusia, terutama untuk pengumpulan data skala besar. Namun, ini berguna untuk pengumpulan data skala kecil dan ketika data tidak tersedia melalui cara lain.
API memungkinkan pengembang untuk mengakses dan mengambil data secara terstruktur. Mereka sering memberikan informasi real-time atau diperbarui secara berkala. Namun, akses API mungkin terbatas, memerlukan autentikasi, atau memiliki batasan penggunaan.
Kumpulan data publik mencakup berbagai topik dan domain. Mereka sudah dikumpulkan sebelumnya dan sering datang dalam format terstruktur, membuatnya mudah diakses. Mereka dapat menghemat waktu dan tenaga saat data yang diperlukan selaras dengan kumpulan data yang tersedia. Namun, mereka mungkin tidak selalu memenuhi kebutuhan spesifik Anda atau up-to-date.
Pengikisan web menyediakan cara untuk mengumpulkan data dari situs web yang tidak menawarkan API atau memiliki akses terbatas. Ini memungkinkan penyesuaian, skalabilitas, dan kemampuan untuk mengumpulkan data dari berbagai sumber. Namun, itu membutuhkan keterampilan pemrograman, pengetahuan tentang struktur HTML, dan kepatuhan terhadap pedoman hukum dan etika.
Memilih Web Scraping untuk Pengumpulan Data
Pengikisan web memungkinkan Anda mengekstrak informasi langsung dari halaman web, memberi Anda akses ke berbagai sumber data. Ini juga memberi Anda kendali atas data apa yang akan diekstraksi dan bagaimana menyusunnya. Hal ini memudahkan untuk menyesuaikan proses scraping untuk memenuhi kebutuhan spesifik Anda dan mengekstrak informasi yang tepat yang Anda perlukan untuk proyek Anda.
Mengidentifikasi Sumber Data
Langkah pertama dalam pengikisan web adalah mengidentifikasi sumber data. Ini adalah situs web yang berisi data yang ingin Anda kikis. Saat memilih sumber data, pastikan Anda menyelaraskan dengan persyaratan layanan sumber tersebut. Artikel ini akan menggunakan IMDb (Internet Movie Database) sebagai sumber datanya.
Menyiapkan Lingkungan Anda
Siapkan lingkungan virtual. Kemudian jalankan perintah berikut untuk menginstal pustaka yang diperlukan.
pip install meminta panda beautifulsoup4
Anda akan menggunakan permintaan perpustakaan untuk membuat permintaan HTTP. sup cantik4 untuk mengurai konten HTML dan mengekstrak data dari halaman web. Akhirnya, Anda akan menggunakan panda untuk memanipulasi dan menganalisis data.
Kode sumber lengkap tersedia di a repositori GitHub.
Menulis Skrip Scraping Web
Impor pustaka yang terpasang di skrip Anda untuk dapat menggunakan fungsi yang disediakannya.
impor permintaan
dari bs4 impor Sup Cantik
impor waktu
impor panda sebagai pd
impor ulang
Itu waktu Dan ulang modules adalah bagian dari pustaka standar Python. Oleh karena itu, tidak memerlukan instalasi terpisah.
waktu akan menambah penundaan proses scraping sementara ulang akan berurusan dengan ekspresi reguler.
Kamu akan gunakan Beautiful Soup untuk mengikis situs target.
Buat fungsi yang akan mengirimkan permintaan HTTP GET ke URL target Anda. Itu kemudian harus mengambil konten respons dan membuat a Sup Cantik objek dari konten HTML.
defget_soup(url, params=Tidak ada, tajuk=Tidak ada):
respon = request.get (url, params=params, headers=header)
sup = BeautifulSoup (respons.konten, "html.parser")
kembali Sup
Langkah selanjutnya adalah mengekstrak informasi dari Sup Cantik obyek.
Untuk mengekstrak informasi yang Anda butuhkan untuk memahami struktur situs target Anda. Ini melibatkan pemeriksaan kode HTML situs web. Ini akan membantu Anda mengidentifikasi elemen dan atribut yang berisi data yang ingin Anda ekstrak. Untuk memeriksa situs web target Anda, buka tautannya di browser web dan arahkan ke halaman web yang berisi data yang ingin Anda ambil.
Kemudian klik kanan pada halaman web dan pilih Memeriksa dari menu konteks. Ini akan membuka alat pengembang browser.
Dalam kode HTML laman web, cari elemen yang berisi data yang ingin Anda gosok. Perhatikan tag HTML, kelas, dan atribut yang terkait dengan data yang Anda butuhkan. Anda akan menggunakannya untuk membuat pemilih untuk mengekstraksi data menggunakan BeautifulSoup. Pada tangkapan layar di atas Anda dapat melihat bahwa judul film ada di dalam lister-item-header kelas. Periksa setiap fitur yang ingin Anda ekstrak.
Buat fungsi yang akan mengekstrak informasi dari Sup Cantik obyek. Dalam hal ini, fungsi menemukan judul, peringkat, deskripsi, genre, tanggal rilis, sutradara, dan bintang film menggunakan tag HTML dan atribut kelas yang sesuai.
defekstrak_film_data(film):
judul = movie.find("h3", kelas_="daftar-item-header").menemukan("A").teks
rating = movie.find("div", kelas_="peringkat-imdb-peringkat").kuat.teks
deskripsi = movie.find("div", kelas_="daftar-item-konten").Temukan semua("P")[1].text.strip()
elemen_genre = movie.find("menjangkau", kelas_="genre")
genre = genre_element.text.strip() jika elemen_genre kalau tidakTidak ada
tanggal_rilis = movie.find("menjangkau", kelas_="lister-item-year text-muted unbold").teks.strip()
sutradara_bintang = movie.find("P", kelas_="teks-dibisukan").Temukan semua("A")
direksi = [orang.teks untuk orang di dalam direktur_bintang[:-1]]
bintang = [orang.teks untuk orang di dalam direktur_bintang[-1:]]
movie_data = {
"Judul": judul,
"Peringkat": peringkat,
"Keterangan": keterangan,
"Genre": genre,
"Tanggal rilis": tanggal rilis,
"Direktur": direksi,
"Bintang": bintang
}
kembali movie_data
Terakhir, buat sebuah fungsi yang akan melakukan pengikisan sebenarnya menggunakan dua fungsi di atas. Ini akan memakan waktu satu tahun dan jumlah maksimum film yang ingin Anda kikis.
defscrape_imdb_movies(tahun, batas):
url_dasar = " https://www.imdb.com/search/title"
tajuk = {"Terima-Bahasa": "en-US, en; q=0,9"}
film = []
mulai = 1
ketika len (film) parameter = {
"tanggal rilis": tahun,
"menyortir": "num_votes, desc",
"awal": awal
}
sup = get_soup (base_url, params=params, headers=header)
movie_list = sup.find_all("div", kelas_="mode lister-item-canggih")
jika len (movie_list) == 0:
merusak
untuk film di dalam daftar_film:
movie_data = ekstrak_movie_data (film)
film.tambahkan (movie_data)
jika len (film) >= batas:
merusak
mulai += 50# IMDb menampilkan 50 film per halaman
waktu tidur(1) # Tambahkan penundaan untuk menghindari kewalahan server
kembali film
Lalu panggil def scrape_imdb_movies untuk melakukan pengikisan.
# Kikis 1000 film yang dirilis pada tahun 2023 (atau sebanyak yang tersedia)
film = kikis_imdb_movies(2023, 1000)
Anda sekarang telah menggores data.
Langkah selanjutnya adalah membuat dataset dari data ini.
Membuat Dataset Dari Data Tergores
Buat DataFrame menggunakan Pandas dari data tergores.
df = pd. DataFrame (film)
Kemudian, lakukan preprocessing dan cleaning data. Dalam hal ini, hapus baris dengan nilai yang hilang. Kemudian ekstrak tahun dari tanggal rilis dan ubah menjadi numerik. Hapus kolom yang tidak perlu. Mengkonversi Peringkat kolom ke numerik. Terakhir, hapus karakter non-abjad dari Judul kolom.
df = df.dropna()
df['Tahun rilis'] = df['Tanggal rilis'].str.ekstrak(r'(\d{4})')
df['Tahun rilis'] = pd.to_numeric (df['Tahun rilis'],
kesalahan='memaksa').astipe('Int64')
df = df.drop(['Tanggal rilis'], sumbu=1)
df['Peringkat'] = pd.to_numeric (df['Peringkat'], kesalahan ='memaksa')
df['Judul'] = df['Judul'].menerapkan(lambda x: re.sub(r'\W+', ' ', X))
Simpan data dalam file untuk digunakan nanti dalam proyek Anda.
df.to_csv("imdb_movies_dataset.csv", indeks=PALSU)
Terakhir, cetak lima baris pertama kumpulan data Anda untuk melihat tampilannya.
df.head()
Outputnya seperti yang ditunjukkan pada tangkapan layar di bawah ini:
Anda sekarang memiliki kumpulan data yang diperoleh melalui web scraping.
Pengikisan Web Menggunakan Pustaka Python Lainnya
Beautiful Soup bukan satu-satunya library Python yang dapat Anda gunakan untuk web scraping. Ada perpustakaan lain di luar sana. Masing-masing dengan kelebihan dan keterbatasannya sendiri. Teliti mereka untuk mencari tahu mana yang paling sesuai dengan kasus penggunaan Anda.