Wie man mit Python Netflix-Daten abruft

Bemerkungen: 0

Das Sammeln von Daten aus Netflix kann detaillierte Details zu Filmen und Fernsehserien liefern, einschließlich Elementen wie Titeln, Veröffentlichungsdaten, Inhaltskategorien und Inhaltsübersichten. Dieser Artikel zeigt, wie man mit Python, Requests und lxml Daten aus mehreren Netflix-Filmseiten extrahieren kann. Da Netflix keine offene API für Filmdaten bereitstellt, können wir durch Scraping wertvolle Inhaltsdaten sammeln, die Empfehlungen, Inhaltsanalysen und andere Anwendungen unterstützen können.

Anforderungen und Installation

Stellen Sie zunächst sicher, dass die Bibliotheken requests und lxml installiert sind. Verwenden Sie die folgenden Befehle, um Ihre Umgebung einzurichten:


pip install requests
pip install lxml

Diese Bibliotheken sind für das Senden von HTTP-Anfragen an die Netflix-Seiten und das Parsen von HTML-Inhalten zur Extraktion der erforderlichen Daten unerlässlich.

Einrichten des Abstreifers

Um auf Netflix-Seiten zuzugreifen, benötigen wir eine Liste von URLs, die wir durchlaufen, um Filmdetails abzurufen. In diesem Tutorial werden der Filmtitel, das Jahr, die Dauer, die Beschreibung, das Genre und mehr von jeder angegebenen Seiten-URL von Netflix abgerufen.

Kopfzeilen und Proxy-Einrichtung

Netflix wendet strenge Anti-Bot-Maßnahmen an, so dass die Verwendung korrekter Kopfzeilen und Proxys (falls erforderlich) eine Entdeckung verhindern kann. In diesem Skript imitieren wir einen echten Browser, indem wir benutzerdefinierte Kopfzeilen mit einem User-Agent, Spracheinstellungen und anderen Parametern einrichten, damit unsere Anfragen legitimer aussehen.


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

Bei Bedarf können Proxys hinzugefügt werden, um Anfragen von verschiedenen IP-Adressen aus zu stellen, was die Wahrscheinlichkeit, dass eine Kennzeichnung erfolgt, weiter verringert. Beispiel für die Integration eines Proxys mit IP-Adressen-Authentifizierung:


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

Schritt-für-Schritt-Aufschlüsselung des Codes

Schritt 1. Einrichten der URL-Liste

Wir geben eine Liste von Netflix-Film-URLs an, die unser Skript durchläuft, um Daten zu extrahieren.


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

Schritt 2. Absenden der HTTP-Anfrage

Auf jede URL wird mit der Methode requests.get() zugegriffen, wobei die Kopfzeilen übergeben werden, um eine Entdeckung zu vermeiden.


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

Schritt 3. Parsen des HTML-Inhalts

Mit lxml wird die HTML-Antwort geparst, um mit XPath-Ausdrücken zu navigieren und Daten zu extrahieren.


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

Schritt 4. Extrahieren von Datenelementen

Mit XPath erfassen wir wichtige Filmdetails wie Titel, Jahr, Dauer, Beschreibung, Genre, Untertitel und mehr. Nachfolgend sehen Sie, wie jedes Feld extrahiert wird:


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

Schritt 5. Speichern von Daten in einer Liste

Wir speichern die Daten der einzelnen Filme in einem Wörterbuch und fügen sie an eine Liste an. Auf diese Weise bleiben die Daten organisiert und können im CSV-Format gespeichert werden.


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)

Schritt 6. Schreiben der Daten in CSV

Nachdem wir alle URLs durchgegangen sind, schreiben wir die gesammelten Daten in eine CSV-Datei.


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)

Vollständiger Code

Der vollständige Code kombiniert alle Schritte mit Headern und Proxy-Einrichtung.


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

Das Scraping von Netflix-Daten mit Python bietet eine praktische Möglichkeit, auf Inhaltsdetails zuzugreifen, ohne eine offizielle API zu nutzen. Durch die Verwendung von Headern, Proxies und Parsing-Techniken sammeln und speichern wir effektiv wertvolle Daten. Dieses Skript kann für verschiedene Streaming-Analysen, Empfehlungen oder die Überwachung von Inhalten angepasst werden und hilft Ihnen, Netflix-Daten für breitere Anwendungen zu nutzen.

Bemerkungen:

0 Bemerkungen