Збір даних із 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.com!
Коментарі: 0