CoderCastrov logo
CoderCastrov
Парсер

Парсинг Netflix с помощью Python

Парсинг Netflix с помощью Python
просмотров
4 мин чтение
#Парсер

Как мы все знаем, Netflix - это платформа OTT, где вы можете смотреть неограниченное количество шоу и фильмов. Буквально НЕОГРАНИЧЕННОЕ количество! Вы можете парсить Netflix, чтобы собрать названия эпизодов, актерский состав, рейтинги, похожие шоу, цены на планы и т. д. Используя эти данные, вы можете проанализировать, что пользователи смотрят в последнее время, это также помогает в анализе настроений.

Я буду использовать Python для парсинга Netflix. Я предполагаю, что вы уже установили Python на свой компьютер. Хорошо, я думаю, что мы уже достаточно обсудили. Давайте начнем парсить сейчас!

Парсинг Netflix

Для начала создадим папку и установим все необходимые библиотеки, которые могут понадобиться в ходе этого учебника.

На данный момент мы установим две библиотеки

>> mkdir netflix
>> pip install requests 
>> pip install beautifulsoup4

Внутри этой папки вы можете создать файл python, в котором мы напишем наш код. Мы будем парсить эту страницу Netflix. Нас интересуют следующие данные:

Я знаю, что это длинный список данных, но в конце у вас будет готовый код для парсинга любой страницы Netflix, а не только этой страницы.

Давайте найдем местоположение каждого из этих элементов

Заголовок хранится под тегом h1 с классом title-title.

Количество сезонов хранится под тегом span с классом duration..

Раздел "О сериале" хранится под тегом div с классом hook-text..

Заголовок эпизода хранится под тегом h3 с классом episode-title..

Описание эпизода хранится под тегом p с классом episode-synopsis..

Жанр хранится под тегом span с классом item-genres..

Категория шоу хранится под тегом span с классом item-mood-tag..

Ссылки на социальные сети можно найти под тегом a с классом social-link..

Актерский состав хранится под тегом span с классом item-cast..

Давайте начнем с обычного GET-запроса к целевой веб-странице и посмотрим, что произойдет.

import requests
from bs4 import BeautifulSoup

target_url="[https://www.netflix.com/in/title/80057281](https://www.netflix.com/in/title/80057281)"
resp = requests.get(target_url)
print(resp.status_code)

Если вы получаете код 200, то вы успешно спарсили нашу целевую страницу. Теперь давайте извлечем информацию из этих данных с помощью BeautifulSoup или BS4.

soup=BeautifulSoup(resp.text, 'html.parser')
l=list()
o={}
e={}
d={}
m={}
c={}

Давайте сначала извлечем все свойства данных по одному. Как уже обсуждалось выше, мы будем использовать ту же HTML-структуру.

o["name"]=soup.find("h1", {"class":"title-title"}).text
o["seasons"]=soup.find("span", {"class":"duration"}).text
o["about"]=soup.find("div", {"class":"hook-text"}).text

Теперь давайте извлечем детали эпизодов.

episodes = soup.find("ol",{"class":"episodes-container"}).find_all("li")
for i in range(0,len(episodes)):
    e["episode-title"]=episodes[i].find("h3",{"class":"episode-title"}).text
    e["episode-description"]=episodes[i].find("p",{"class":"epsiode-synopsis"}).text
    l.append(e)
    e={}

Полные данные находятся внутри тега ol. Поэтому мы сначала находим тег ol, а затем все теги li внутри него. Затем мы используем цикл for для извлечения заголовка и описания.

Теперь давайте извлечем жанр.

genres = soup.find_all("span",{"class":"item-genres"})
for x in range(0,len(genres)):
    d["genre"]=genres[x].text.replace(",","")
    l.append(d)
    d={}

Жанр можно найти под классом item-genres. Опять же, мы используем цикл for для извлечения всех жанров.

Давайте извлечем остальные свойства данных с помощью аналогичной техники.

mood = soup.find_all("span",{"class":"item-mood-tag"})
for y in range(0,len(mood)):
    m["mood"]=mood[y].text.replace(",","")
    l.append(m)
    m={}
o["facebook"]=soup.find("a",{"data-uia":"social-link-facebook"}).get("href")
o["twitter"]=soup.find("a",{"data-uia":"social-link-twitter"}).get("href")
o["instagram"]=soup.find("a",{"data-uia":"social-link-instagram"}).get("href")
cast=soup.find_all("span",{"class":"item-cast"})
for t in range(0,len(cast)):
    c["cast"]=cast[t].text
    l.append(c)
    c={}
l.append(o)
print(l)

Мы смогли спарсить все данные с Netflix.

import requests
from bs4 import BeautifulSoup

l = []
o = {}
e = {}
d = {}
m = {}
c = {}

target_url = "https://www.netflix.com/in/title/80057281"
resp = requests.get(target_url)
soup = BeautifulSoup(resp.text, 'html.parser')

o["name"] = soup.find("h1", {"class":"title-title"}).text
o["seasons"] = soup.find("span", {"class":"duration"}).text
o["about"] = soup.find("div", {"class":"hook-text"}).text

episodes = soup.find("ol",{"class":"episodes-container"}).find_all("li")
for i in range(0,len(episodes)):
    e["episode-title"] = episodes[i].find("h3",{"class":"episode-title"}).text
    e["episode-description"] = episodes[i].find("p",{"class":"epsiode-synopsis"}).text
    l.append(e)
    e = {}

genres = soup.find_all("span",{"class":"item-genres"})
for x in range(0,len(genres)):
    d["genre"] = genres[x].text.replace(",","")
    l.append(d)
    d = {}

mood = soup.find_all("span",{"class":"item-mood-tag"})
for y in range(0,len(mood)):
    m["mood"] = mood[y].text.replace(",","")
    l.append(m)
    m = {}

o["facebook"] = soup.find("a",{"data-uia":"social-link-facebook"}).get("href")
o["twitter"] = soup.find("a",{"data-uia":"social-link-twitter"}).get("href")
o["instagram"] = soup.find("a",{"data-uia":"social-link-instagram"}).get("href")

cast = soup.find_all("span",{"class":"item-cast"})
for t in range(0,len(cast)):
    c["cast"] = cast[t].text
    l.append(c)
    c = {}

l.append(o)

print(l)

Заключение

Это был быстрый способ спарсить полную страницу Netflix. Изменяя идентификатор заголовка шоу, вы можете спарсить практически все шоу с Netflix. Вам просто нужно иметь идентификаторы этих шоу. Вместо BS4 вы также можете использовать XPath для создания HTML-дерева для извлечения данных. Вы можете использовать Web Scraping API, чтобы извлекать данные с Netflix в большом масштабе, не рискуя быть заблокированным.

Надеюсь, вам понравился этот быстрый учебник по парсингу Netflix, и если да, пожалуйста, поделитесь этим блогом в своих социальных сетях. Дайте нам знать, если вам нужна помощь с какими-либо запросами по парсингу веб-сайтов.

Дополнительные ресурсы