Сбор данных с Netflix поможет выявить множество полезных сведений о фильмах и сериалах, таких как названия, даты релизов, жанры и рецензии. В данной статье рассматривается методика извлечения этих данных с использованием Python и библиотек requests и lxml для анализа HTML-контента страниц Netflix. Так как платформа не предлагает публичного API для доступа к информации о своем контенте, методика скрапинга становится ключевым инструментом для получения данных, которые можно использовать для разработки систем рекомендаций, анализа контента и других целей.
Перед началом убедитесь, что установлены библиотеки requests и lxml. Используйте следующие команды для настройки рабочей среды:
pip install requests
pip install lxml
Эти библиотеки необходимы для отправки HTTP-запросов на страницы Netflix и анализа HTML-контента для извлечения необходимых данных.
Для доступа к страницам Netflix необходим список URL, по которым будет осуществляться переход для извлечения информации о фильмах. В этом руководстве будет показано, как извлекать информацию о названии фильма, годе выпуска, продолжительности, описании, жанре и других данных с каждой указанной страницы Netflix.
Netflix использует защитные технологии против ботов, поэтому правильное использование заголовков и прокси может предотвратить обнаружение. В этом скрипте моделируется поведение настоящего браузера путем настройки пользовательских заголовков с указанием User-Agent, предпочтений языка и других параметров, что делает запросы менее подозрительными.
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',
}
При необходимости можно добавить прокси для выполнения запросов с разных IP-адресов, что еще больше уменьшит вероятность обнаружения. Пример интеграции прокси с авторизацией по IP-адресу:
proxies = {
'http': 'http://your_proxy_address:port',
'https': 'http://your_proxy_address:port',
}
response = requests.get(url, headers=headers, proxies=proxies)
Указываем список URL-адресов фильмов Netflix, который скрипт будет перебирать для извлечения данных.
urls_list = [
'Https ссылка',
'Https ссылка'
]
Доступ к каждому URL осуществляется с помощью метода requests.get(), передавая заголовки для избежания обнаружения.
response = requests.get(url, headers=headers)
Используя lxml, парсим HTML-ответ для навигации и извлечения данных с помощью выражений XPath.
from lxml.html import fromstring
parser = fromstring(response.text)
С помощью XPath захватываем важные данные о фильме, такие как название, год, продолжительность, описание, жанр, субтитры и другое. Ниже приведен пример, как извлекается каждое поле:
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()'))
Каждые собранные данные о фильме сохраняем в словарь и добавляем его в список. Этот подход позволяет организованно хранить данные и подготавливать их к конвертации в 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)
После перебора всех URL записываем накопленные данные в 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)
import requests
from lxml.html import fromstring
import csv
urls_list = [
'Https ссылка',
'Https ссылка'
]
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')
Скрапинг данных с Netflix с использованием Python представляет собой эффективный метод доступа к информации о контенте, которая не доступна через официальные API. Применение специализированных заголовков, настроек прокси и техник парсинга позволяет точно и эффективно извлекать данные, которые могут быть использованы для разнообразных аналитических и мониторинговых целей. Такой подход обеспечивает гибкость в настройке скрипта для адаптации под конкретные задачи анализа, рекомендации контента или даже исследовательские проекты, значительно расширяя возможности использования данных Netflix в различных приложениях.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.io!
Комментарии: 0