L'estrazione di dati da Netflix può fornire dettagli approfonditi su film e serie TV, tra cui elementi come titoli, date di rilascio, categorie di contenuti e panoramica dei contenuti. Questo articolo mostra come estrarre dati da più pagine di film di Netflix utilizzando Python, richieste e lxml. Poiché Netflix non fornisce un'API aperta per i dati sui film, lo scraping ci permette di raccogliere dati preziosi sui contenuti che possono supportare raccomandazioni, analisi dei contenuti e altre applicazioni.
Per iniziare, assicurarsi che le librerie requests e lxml siano installate. Usare i seguenti comandi per configurare l'ambiente:
pip install requests
pip install lxml
Queste librerie sono essenziali per l'invio di richieste HTTP alle pagine Netflix e per il parsing del contenuto HTML per estrarre i dati richiesti.
Per accedere alle pagine di Netflix, abbiamo bisogno di un elenco di URL da scorrere per recuperare i dettagli dei film. Questa esercitazione recupera il titolo del film di Netflix, l'anno, la durata, la descrizione, il genere e altro ancora da ogni URL di pagina specificato.
Netflix adotta rigorose misure anti-bot, pertanto l'utilizzo di intestazioni e proxy corretti (se necessario) può impedire il rilevamento. In questo script, imitiamo un browser reale impostando intestazioni personalizzate con User-Agent, preferenze di lingua e altri parametri, facendo apparire le nostre richieste più legittime.
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 necessario, è possibile aggiungere dei proxy per effettuare richieste da indirizzi IP diversi, riducendo ulteriormente la probabilità di essere segnalati. Esempio di integrazione di un proxy con l'autenticazione dell'indirizzo IP:
proxies = {
'http': 'http://your_proxy_address:port',
'https': 'http://your_proxy_address:port',
}
response = requests.get(url, headers=headers, proxies=proxies)
Specifichiamo un elenco di URL di film di Netflix, che il nostro script itererà per estrarre i dati.
urls_list = [
'Https link',
'Https link'
]
A ogni URL si accede con il metodo requests.get(), passando le intestazioni per evitare il rilevamento.
response = requests.get(url, headers=headers)
Utilizzando lxml, analizziamo la risposta HTML per navigare ed estrarre i dati utilizzando le espressioni XPath.
from lxml.html import fromstring
parser = fromstring(response.text)
Utilizzando XPath, catturiamo i dettagli essenziali di un film come titolo, anno, durata, descrizione, genere, sottotitoli e altro ancora. Di seguito viene illustrato come viene estratto ogni 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()'))
Memorizziamo i dati di ogni film in un dizionario e li aggiungiamo a un elenco. Questo approccio mantiene i dati organizzati e pronti per essere salvati in 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)
Infine, dopo aver iterato tutti gli URL, scriviamo i dati accumulati in un file 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)
Il codice completo combina tutti i passaggi con le intestazioni e l'impostazione 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')
Lo scraping dei dati di Netflix con Python offre un modo pratico per accedere ai dettagli dei contenuti senza un'API ufficiale. Utilizzando intestazioni, proxy e tecniche di parsing, raccogliamo e salviamo dati preziosi in modo efficace. Questo script può essere personalizzato per varie analisi dello streaming, raccomandazioni o monitoraggio dei contenuti, aiutandovi a utilizzare i dati di Netflix per applicazioni più ampie.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Commenti: 0