Cómo extraer datos de Netflix con Python

Comentarios: 0

Recolectar datos de Netflix puede proporcionar detalles en profundidad sobre películas y series de televisión, incluyendo elementos como títulos, fechas de estreno, categorías de contenido y contenidos generales. Este artículo muestra cómo extraer datos de varias páginas de películas de Netflix utilizando Python, peticiones y lxml. Dado que Netflix no proporciona una API abierta para datos de películas, el scraping nos permite recopilar valiosos datos de contenido que pueden servir de apoyo a recomendaciones, análisis de contenido y otras aplicaciones.

Requisitos e instalación

Para empezar, asegúrese de que las bibliotecas requests y lxml están instaladas. Utilice los siguientes comandos para configurar su entorno:


pip install requests
pip install lxml

Estas bibliotecas son esenciales para enviar peticiones HTTP a las páginas de Netflix y analizar el contenido HTML para extraer los datos necesarios.

Configuración del rascador

Para acceder a las páginas de Netflix, necesitamos una lista de URLs que recorreremos para recuperar los detalles de las películas. Este tutorial extraerá el título de la película de Netflix, el año, la duración, la descripción, el género y mucho más de cada URL de página especificada.

Cabeceras y configuración del proxy

Netflix emplea estrictas medidas anti-bot, por lo que el uso de cabeceras y proxies correctos (si es necesario) puede evitar su detección. En este script, imitamos un navegador real configurando cabeceras personalizadas con un User-Agent, preferencias de idioma y otros parámetros, haciendo que nuestras peticiones parezcan más legítimas.


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 es necesario, se pueden añadir proxies para realizar peticiones desde diferentes direcciones IP, reduciendo aún más la probabilidad de ser marcado. Ejemplo de integración de un proxy con autenticación de dirección IP:



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

Desglose de códigos paso a paso

Paso 1. Configurar la lista de URL

Especificamos una lista de URL de películas de Netflix, que nuestro script iterará para extraer los datos.



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

Paso 2. Envío de la solicitud HTTP

Se accede a cada URL con el método requests.get(), pasando las cabeceras para evitar la detección.



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

Paso 3. Análisis del contenido HTML

Usando lxml, analizamos la respuesta HTML para navegar y extraer datos usando expresiones XPath.


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

Paso 4. Extracción de elementos de datos

Usando XPath, capturamos detalles esenciales de la película como título, año, duración, descripción, género, subtítulos y más. A continuación se muestra cómo se extrae cada campo:


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

Paso 5. Guardar los datos en una lista Guardar datos en una lista

Almacenamos los datos de cada película en un diccionario y los añadimos a una lista. Este enfoque mantiene los datos organizados y listos para ser guardados 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)

Paso 6. Escritura de datos en CSV

Por último, tras iterar por todas las URL, escribimos los datos acumulados en un archivo 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)

Código completo

El código completo combina todos los pasos con las cabeceras y la configuración del 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')

El scraping de datos de Netflix con Python proporciona una forma práctica de acceder a los detalles de los contenidos sin una API oficial. Mediante el uso de cabeceras, proxies y técnicas de análisis sintáctico, recopilamos y guardamos datos valiosos de forma eficaz. Este script se puede personalizar para diversas analíticas de streaming, recomendaciones o monitorización de contenidos, ayudándote a utilizar los datos de Netflix para aplicaciones más amplias.

Comentarios:

0 Comentarios