Netflix에서 데이터를 수집하면 제목, 개봉일, 콘텐츠 카테고리, 개요 콘텐츠 등의 항목을 포함하여 영화 및 TV 시리즈에 대한 심층적인 세부 정보를 제공할 수 있습니다. 이 문서에서는 Python, 요청 및 lxml을 사용하여 여러 Netflix 영화 페이지에서 데이터를 추출하는 방법을 설명합니다. Netflix는 영화 데이터에 대한 오픈 API를 제공하지 않기 때문에 스크래핑을 통해 추천, 콘텐츠 분석 및 기타 애플리케이션을 지원할 수 있는 귀중한 콘텐츠 데이터를 수집할 수 있습니다.
시작하려면 요청 및 lxml 라이브러리가 설치되어 있는지 확인합니다. 다음 명령을 사용하여 환경을 설정합니다:
pip install requests
pip install lxml
이러한 라이브러리는 Netflix 페이지에 HTTP 요청을 전송하고 HTML 콘텐츠를 구문 분석하여 필요한 데이터를 추출하는 데 필수적입니다.
Netflix 페이지에 액세스하려면 영화 세부 정보를 검색하기 위해 반복할 URL 목록이 필요합니다. 이 튜토리얼에서는 지정된 각 페이지 URL에서 Netflix의 영화 제목, 연도, 상영 시간, 설명, 장르 등을 스크랩합니다.
Netflix는 엄격한 봇 방지 조치를 취하고 있으므로 올바른 헤더와 프록시(필요한 경우)를 사용하면 탐지를 방지할 수 있습니다. 이 스크립트에서는 사용자 에이전트, 언어 기본 설정 및 기타 매개변수로 사용자 지정 헤더를 설정하여 실제 브라우저를 모방하여 요청이 더 합법적으로 보이도록 합니다.
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)
스크립트에서 데이터를 추출하기 위해 반복할 Netflix 영화 URL 목록을 지정합니다.
urls_list = [
'Https link',
'Https link'
]
각 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 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')
Python으로 Netflix 데이터를 스크래핑하면 공식 API 없이도 콘텐츠 세부 정보에 액세스할 수 있는 실용적인 방법을 제공합니다. 헤더, 프록시, 구문 분석 기술을 사용하여 귀중한 데이터를 효과적으로 수집하고 저장합니다. 이 스크립트는 다양한 스트리밍 분석, 추천 또는 콘텐츠 모니터링에 맞게 사용자 지정할 수 있으므로 더 광범위한 애플리케이션에 Netflix 데이터를 활용할 수 있습니다.
댓글: 0