Como extrair dados da Netflix utilizando Python

Comentários: 0

A recolha de dados da Netflix pode fornecer detalhes aprofundados sobre filmes e séries de TV, incluindo itens como títulos, datas de lançamento, categorias de conteúdo e visão geral do conteúdo. Este artigo demonstra como extrair dados de várias páginas de filmes da Netflix usando Python, solicitações e lxml. Como a Netflix não fornece uma API aberta para dados de filmes, o scraping nos permite reunir dados de conteúdo valiosos que podem dar suporte a recomendações, análise de conteúdo e outros aplicativos.

Requisitos e instalação

Para começar, certifique-se de que as bibliotecas requests e lxml estão instaladas. Utilize os seguintes comandos para configurar o seu ambiente:


pip install requests
pip install lxml

Estas bibliotecas são essenciais para enviar pedidos HTTP para as páginas Netflix e analisar o conteúdo HTML para extrair os dados necessários.

Configuração do raspador

Para acessar as páginas da Netflix, precisamos de uma lista de URLs que vamos iterar para recuperar os detalhes do filme. Este tutorial irá extrair o título do filme da Netflix, ano, duração, descrição, gênero e muito mais de cada URL de página especificada.

Configuração de cabeçalhos e proxy

A Netflix emprega medidas anti-bot rigorosas, pelo que a utilização de cabeçalhos e proxies corretos (se necessário) pode evitar a deteção. Neste script, imitamos um navegador real configurando cabeçalhos personalizados com um User-Agent, preferências de idioma e outros parâmetros, fazendo com que nossas solicitações pareçam mais 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',
}

Se necessário, podem ser adicionados proxies para efetuar pedidos a partir de diferentes endereços IP, reduzindo ainda mais a probabilidade de serem assinalados. Exemplo de integração de um proxy com autenticação de endereço IP:



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

Divisão do código passo a passo

Passo 1. Configurando a lista de URLs

Especificamos uma lista de URLs de filmes da Netflix, que nosso script irá iterar para extrair dados.



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

Passo 2. Enviando a solicitação HTTP

Cada URL é acedido com o método requests.get(), passando os cabeçalhos para evitar a deteção.



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

Passo 3. Analisando o conteúdo HTML

Usando lxml, analisamos a resposta HTML para navegar e extrair dados usando expressões XPath.


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

Passo 4. Extração de elementos de dados

Usando XPath, capturamos detalhes essenciais do filme, como título, ano, duração, descrição, género, legendas e muito mais. Abaixo está como cada campo é extraído:


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

Passo 5. Guardar dados numa lista

Armazenamos os dados de cada filme em um dicionário e os anexamos a uma lista. Essa abordagem mantém os dados organizados e prontos para serem salvos em 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)

Passo 6. Gravando dados em CSV

Finalmente, depois de iterar por todos os URLs, escrevemos os dados acumulados em um arquivo 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

O código completo combina todos os passos com cabeçalhos e configuração de 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')

A raspagem de dados da Netflix com Python fornece uma maneira prática de acessar detalhes de conteúdo sem uma API oficial. Ao usar cabeçalhos, proxies e técnicas de análise, reunimos e salvamos dados valiosos de forma eficaz. Este script pode ser personalizado para várias análises de streaming, recomendações ou monitoramento de conteúdo, ajudando você a utilizar os dados da Netflix para aplicativos mais amplos.

Comentários:

0 Comentários