Парсинг Netflix с помощью Python
Как мы все знаем, 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, и если да, пожалуйста, поделитесь этим блогом в своих социальных сетях. Дайте нам знать, если вам нужна помощь с какими-либо запросами по парсингу веб-сайтов.
Дополнительные ресурсы
- Парсинг отзывов Yelp с использованием Python
- Парсинг Yellow Pages с использованием Python
- Парсинг Zillow с использованием Python