Comment récupérer les données de Netflix à l'aide de Python

Commentaires: 0

L'extraction de données de Netflix peut fournir des détails approfondis sur les films et les séries télévisées, y compris des éléments tels que les titres, les dates de sortie, les catégories de contenu et les contenus d'ensemble. Cet article montre comment extraire des données de plusieurs pages de films Netflix en utilisant Python, des requêtes et lxml. Comme Netflix ne fournit pas d'API ouverte pour les données sur les films, le scraping nous permet de rassembler des données précieuses sur le contenu qui peuvent supporter des recommandations, des analyses de contenu et d'autres applications.

Exigences et installation

Pour commencer, assurez-vous que les bibliothèques requests et lxml sont installées. Utilisez les commandes suivantes pour configurer votre environnement :


pip install requests
pip install lxml

Ces bibliothèques sont essentielles pour envoyer des requêtes HTTP aux pages Netflix et pour analyser le contenu HTML afin d'en extraire les données requises.

Mise en place du grattoir

Pour accéder aux pages Netflix, nous avons besoin d'une liste d'URLs que nous allons itérer pour récupérer les détails des films. Ce tutoriel va récupérer le titre du film Netflix, l'année, la durée, la description, le genre, et plus encore à partir de chaque URL de page spécifiée.

En-têtes et configuration du proxy

Netflix utilise des mesures anti-bots strictes, de sorte que l'utilisation d'en-têtes et de proxies corrects (si nécessaire) peut empêcher la détection. Dans ce script, nous imitons un vrai navigateur en configurant des en-têtes personnalisés avec un User-Agent, des préférences linguistiques et d'autres paramètres, ce qui rend nos requêtes plus légitimes.



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

Si nécessaire, des proxys peuvent être ajoutés pour effectuer des requêtes à partir de différentes adresses IP, ce qui réduit encore la probabilité d'être signalé. Exemple d'intégration d'un proxy avec authentification de l'adresse IP :


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

Ventilation du code étape par étape

Étape 1. Établissement de la liste des URL

Nous spécifions une liste d'URL de films Netflix, que notre script va parcourir pour extraire des données.



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

Étape 2. Envoi de la requête HTTP

Chaque URL est accessible avec la méthode requests.get(), en passant les en-têtes pour éviter la détection.



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

Étape 3. Analyse du contenu HTML

En utilisant lxml, nous analysons la réponse HTML pour naviguer et extraire des données à l'aide d'expressions XPath.


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

Étape 4. Extraction des éléments de données

À l'aide de XPath, nous capturons les détails essentiels des films tels que le titre, l'année, la durée, la description, le genre, les sous-titres, etc. Voici comment chaque champ est extrait :


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

Étape 5. Enregistrement des données dans une liste

Nous stockons les données de chaque film dans un dictionnaire et les ajoutons à une liste. Cette approche permet de garder les données organisées et prêtes à être sauvegardées en 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)

Étape 6. Écriture des données au format CSV

Enfin, après avoir parcouru toutes les URL, nous écrivons les données accumulées dans un fichier 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)

Code complet

Le code complet combine toutes les étapes avec les en-têtes et la configuration du 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')

L'exploration des données de Netflix avec Python offre un moyen pratique d'accéder aux détails du contenu sans API officielle. En utilisant des en-têtes, des proxies et des techniques d'analyse, nous rassemblons et sauvegardons des données précieuses de manière efficace. Ce script peut être personnalisé pour diverses analyses de streaming, recommandations ou surveillance de contenu, vous aidant ainsi à utiliser les données Netflix pour des applications plus larges.

Commentaires:

0 Commentaires