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.
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.
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.
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)
Especificamos una lista de URL de películas de Netflix, que nuestro script iterará para extraer los datos.
urls_list = [
'Https link',
'Https link'
]
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)
Usando lxml, analizamos la respuesta HTML para navegar y extraer datos usando expresiones XPath.
from lxml.html import fromstring
parser = fromstring(response.text)
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()'))
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)
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)
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.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Comentarios: 0