Mengambil data dari Netflix dapat memberikan detail mendalam tentang film dan serial TV termasuk item seperti judul, tanggal rilis, kategori konten, dan konten ikhtisar. Artikel ini mendemonstrasikan cara mengekstrak data dari beberapa halaman film Netflix menggunakan Python, request, dan lxml. Karena Netflix tidak menyediakan API terbuka untuk data film, scraping memungkinkan kita untuk mengumpulkan data konten berharga yang dapat mendukung rekomendasi, analisis konten, dan aplikasi lainnya.
Untuk memulai, pastikan bahwa pustaka request dan lxml telah terinstal. Gunakan perintah berikut untuk menyiapkan lingkungan Anda:
pip install requests
pip install lxml
Pustaka ini sangat penting untuk mengirim permintaan HTTP ke halaman Netflix dan mengurai konten HTML untuk mengekstrak data yang diperlukan.
Untuk mengakses halaman Netflix, kita memerlukan daftar URL yang akan kita ulangi untuk mengambil detail film. Tutorial ini akan mengikis judul, tahun, durasi, deskripsi, genre, dan banyak lagi dari setiap URL halaman Netflix yang ditentukan.
Netflix menerapkan langkah-langkah anti-bot yang ketat, jadi menggunakan header dan proksi yang benar (jika perlu) dapat mencegah pendeteksian. Dalam skrip ini, kami meniru peramban asli dengan menyiapkan tajuk khusus dengan Agen-Pengguna, preferensi bahasa, dan parameter lainnya, sehingga permintaan kami terlihat lebih sah.
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-IN,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'priority': 'u=0, i',
'sec-ch-ua': '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
}
Jika diperlukan, proxy bisa ditambahkan untuk membuat permintaan dari alamat IP yang berbeda, sehingga mengurangi kemungkinan ditandai. Contoh mengintegrasikan proxy dengan autentikasi alamat IP:
proxies = {
'http': 'http://your_proxy_address:port',
'https': 'http://your_proxy_address:port',
}
response = requests.get(url, headers=headers, proxies=proxies)
Kami menentukan daftar URL film Netflix, yang akan diiterasi oleh skrip kami untuk mengekstrak data.
urls_list = [
'Https link',
'Https link'
]
Setiap URL diakses dengan metode requests.get(), melewatkan header untuk menghindari deteksi.
response = requests.get(url, headers=headers)
Dengan menggunakan lxml, kita mem-parsing respons HTML untuk menavigasi dan mengekstrak data menggunakan ekspresi XPath.
from lxml.html import fromstring
parser = fromstring(response.text)
Dengan menggunakan XPath, kami menangkap detail film yang penting seperti judul, tahun, durasi, deskripsi, genre, teks film, dan banyak lagi. Di bawah ini adalah bagaimana setiap bidang diekstrak:
title = parser.xpath('//h1[@class="title-title"]/text()')[0]
year = parser.xpath('//span[@data-uia="item-year"]/text()')[0]
duration = parser.xpath('//span[@class="duration"]/text()')[0]
description = parser.xpath('//div[@class="title-info-synopsis"]/text()')[0]
maturity_number = parser.xpath('//span[@class="maturity-number"]/text()')[0]
starring = parser.xpath('//span[@data-uia="info-starring"]/text()')[0]
genre = parser.xpath('//a[@data-uia="item-genre"]/text()')[0]
genres = parser.xpath('//span[@data-uia="more-details-item-genres"]/a/text()')
subtitles = ''.join(parser.xpath('//span[@data-uia="more-details-item-subtitle"]/text()'))
audio = ''.join(parser.xpath('//span[@data-uia="more-details-item-audio"]/text()'))
Kami menyimpan data setiap film dalam kamus dan menambahkannya ke daftar. Pendekatan ini membuat data tetap terorganisir dan siap untuk disimpan dalam CSV.
data = {
'title': title,
'year': year,
'duration': duration,
'description': description,
'maturity_number': maturity_number,
'starring': starring,
'genre': genre,
'genres': genres,
'subtitles': subtitles,
'audio': audio
}
extracted_data.append(data)
Terakhir, setelah melakukan iterasi melalui semua URL, kami menulis data yang terkumpul ke file CSV.
import csv
with open('netflix_data.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.DictWriter(f, fieldnames=extracted_data[0].keys())
writer.writeheader()
writer.writerows(extracted_data)
Kode lengkap menggabungkan semua langkah dengan header dan pengaturan proxy.
import requests
from lxml.html import fromstring
import csv
urls_list = [
'Https link',
'Https link'
]
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-IN,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'priority': 'u=0, i',
'sec-ch-ua': '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
}
proxies = {
'http': 'http://your_proxy_address:port',
'https': 'http://your_proxy_address:port',
}
extracted_data = []
for url in urls_list:
response = requests.get(url, headers=headers, proxies=proxies)
parser = fromstring(response.text)
title = parser.xpath('//h1[@class="title-title"]/text()')[0]
year = parser.xpath('//span[@data-uia="item-year"]/text()')[0]
duration = parser.xpath('//span[@class="duration"]/text()')[0]
description = parser.xpath('//div[@class="title-info-synopsis"]/text()')[0]
maturity_number = parser.xpath('//span[@class="maturity-number"]/text()')[0]
starring = parser.xpath('//span[@data-uia="info-starring"]/text()')[0]
genre = parser.xpath('//a[@data-uia="item-genre"]/text()')[0]
genres = parser.xpath('//span[@data-uia="more-details-item-genres"]/a/text()')
subtitles = ''.join(parser.xpath('//span[@data-uia="more-details-item-subtitle"]/text()'))
audio = ''.join(parser.xpath('//span[@data-uia="more-details-item-audio"]/text()'))
data = {
'title': title,
'year': year,
'duration': duration,
'description': description,
'maturity_number': maturity_number,
'starring': starring,
'genre': genre,
'genres': genres,
'subtitles': subtitles,
'audio': audio
}
extracted_data.append(data)
with open('netflix_data.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.DictWriter(f, fieldnames=extracted_data[0].keys())
writer.writeheader()
writer.writerows(extracted_data)
print('saved into netflix_data.csv')
Mengikis data Netflix dengan Python menyediakan cara praktis untuk mengakses detail konten tanpa API resmi. Dengan menggunakan header, proxy, dan teknik penguraian, kami mengumpulkan dan menyimpan data berharga secara efektif. Skrip ini dapat disesuaikan untuk berbagai analisis streaming, rekomendasi, atau pemantauan konten, sehingga membantu Anda memanfaatkan data Netflix untuk aplikasi yang lebih luas.
Komentar: 0