Python kullanarak Netflix verileri nasıl kazınır?

Yorumlar: 0

Netflix'ten veri toplamak, başlıklar, yayın tarihleri, içerik kategorileri ve genel bakış içerikleri gibi öğeler dahil olmak üzere filmler ve TV dizileri hakkında derinlemesine ayrıntılar sağlayabilir. Bu makalede Python, istekler ve lxml kullanılarak birden fazla Netflix film sayfasından nasıl veri çekileceği gösterilmektedir. Netflix film verileri için açık bir API sağlamadığından, kazıma işlemi önerileri, içerik analizini ve diğer uygulamaları destekleyebilecek değerli içerik verilerini toplamamıza olanak tanır.

Gereksinimler ve kurulum

Başlamak için requests ve lxml kütüphanelerinin kurulu olduğundan emin olun. Ortamınızı ayarlamak için aşağıdaki komutları kullanın:


pip install requests
pip install lxml

Bu kütüphaneler, Netflix sayfalarına HTTP istekleri göndermek ve gerekli verileri çıkarmak için HTML içeriğini ayrıştırmak için gereklidir.

Sıyırıcının ayarlanması

Netflix sayfalarına erişmek için, film ayrıntılarını almak üzere yineleyeceğimiz bir URL listesine ihtiyacımız var. Bu eğitim, Netflix'in film başlığı, yılı, süresi, açıklaması, türü ve daha fazlasını belirtilen her sayfa URL'sinden kazıyacaktır.

Üstbilgiler ve proxy kurulumu

Netflix sıkı anti-bot önlemleri kullanır, bu nedenle doğru başlıklar ve proxy'ler (gerekirse) kullanmak tespit edilmeyi önleyebilir. Bu betikte, User-Agent, dil tercihleri ve diğer parametrelerle özel başlıklar oluşturarak gerçek bir tarayıcıyı taklit ediyoruz ve isteklerimizin daha meşru görünmesini sağlıyoruz.



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',
}

Gerekirse, farklı IP adreslerinden istekte bulunmak için proxy'ler eklenebilir ve böylece işaretlenme olasılığı daha da azaltılabilir. IP adresi kimlik doğrulaması ile proxy entegrasyonu örneği:



proxies = {
    'http': 'http://your_proxy_address:port',
    'https': 'http://your_proxy_address:port',
}
response = requests.get(url, headers=headers, proxies=proxies)

Adım adım kod dökümü

Adım 1. URL listesini ayarlama

Betiğimizin veri ayıklamak için yineleyeceği Netflix film URL'lerinin bir listesini belirtiriz.



urls_list = [
    'Https link', 
    'Https link'
]

Adım 2. HTTP isteğini gönderme

Her URL'ye requests.get() yöntemiyle erişilir ve algılanmayı önlemek için başlıklar aktarılır.



response = requests.get(url, headers=headers)

Adım 3. HTML içeriğini ayrıştırma

lxml kullanarak, XPath ifadelerini kullanarak gezinmek ve verileri ayıklamak için HTML yanıtını ayrıştırıyoruz.


from lxml.html import fromstring
parser = fromstring(response.text)

Adım 4. Veri öğelerini ayıklama

XPath kullanarak başlık, yıl, süre, açıklama, tür, altyazılar ve daha fazlası gibi temel film ayrıntılarını yakalıyoruz. Aşağıda her bir alanın nasıl çıkarıldığı gösterilmektedir:


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()'))

Adım 5. Verileri bir listeye kaydetme

Her filmin verilerini bir sözlükte saklıyor ve bir listeye ekliyoruz. Bu yaklaşım, verileri düzenli ve CSV'ye kaydedilmeye hazır tutar.



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)

Adım 6. CSV'ye veri yazma

Son olarak, tüm URL'leri yineledikten sonra, biriken verileri bir CSV dosyasına yazıyoruz.



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)

Tamamlanmış kod

Tam kod, tüm adımları başlıklar ve proxy kurulumu ile birleştirir.


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')

Netflix verilerini Python ile kazımak, resmi bir API olmadan içerik ayrıntılarına erişmek için pratik bir yol sağlar. Başlıklar, proxy'ler ve ayrıştırma tekniklerini kullanarak değerli verileri etkili bir şekilde topluyor ve kaydediyoruz. Bu komut dosyası, çeşitli akış analizleri, öneriler veya içerik izleme için özelleştirilebilir ve Netflix verilerini daha geniş uygulamalar için kullanmanıza yardımcı olur.

Yorumlar:

0 yorumlar