Рубрики
Без рубрики

SCRAPY IMDB Оценка фильма и детали с помощью Python

Эта статья предназначена только для образовательных целей IMDB, предоставляя свою собственную API для получения фильма … Теги с Python, Web, Scraping, BeautySoup.

Эта статья только для образовательных целей

IMDB предоставляет свой собственный API для получения деталей фильма, вы можете использовать это, эта статья является примером веб-сигнала.

Мы получим рейтинг фильма, количество рейтинга, имени и многое другое, для этого мы используем Beautifulsoup и Запросы пакеты

import requests
from bs4 import BeautifulSoup

boys_url = "https://www.imdb.com/title/tt1190634/"

r = requests.get(url=boys_url)
# create a BeautifulSoup object
soup = BeautifulSoup(r.text, 'html.parser')

Чтобы получить название страницы HTML

#page title
title = soup.find('title')
print(title.string)
data["title"] = title.string

SUP.find Это будет искать тег заголовка и получить значение от него использовать title.String, это вернет строку

Предположим, вы хотите получить все теги DIV, используйте Find_all

soup.find_all('div')

Чтобы получить тег с классовой стоимостью

soup.find("div",{'class':'titleBar'})

Полный код, чтобы получить детали в Python Dict, эта функция получит страницу HTML в получении метода с использованием запросов, то он анализируется как BeautifulSoup Object, и вы можете извлечь данные, как вы хотите

def getMovieDetails(url):
    data = {}
    r = requests.get(url=url)
    # Create a BeautifulSoup object
    soup = BeautifulSoup(r.text, 'html.parser')

    #page title
    title = soup.find('title')
    data["title"] = title.string

    # rating
    ratingValue = soup.find("span", {"itemprop" : "ratingValue"})
    data["ratingValue"] = ratingValue.string

    # no of rating given
    ratingCount = soup.find("span", {"itemprop" : "ratingCount"})
    data["ratingCount"] = ratingCount.string

    # name
    titleName = soup.find("div",{'class':'titleBar'}).find("h1")
    data["name"] = titleName.contents[0].replace(u'\xa0', u'')

    # additional details
    subtext = soup.find("div",{'class':'subtext'})
    data["subtext"] = ""
    for i in subtext.contents:
        data["subtext"] += i.string.strip()

    # summary
    summary_text = soup.find("div",{'class':'summary_text'})
    data["summary_text"] = summary_text.string.strip()

    credit_summary_item = soup.find_all("div",{'class':'credit_summary_item'})
    data["credits"] = {}
    for i in credit_summary_item:
        item = i.find("h4")
        names = i.find_all("a")
        data["credits"][item.string] = []
        for i in names:
            data["credits"][item.string].append({
                "link": i["href"],
                "name": i.string
            })
    return data

Фильмы tenet_url = ” https://www.imdb.com/title/tt6723592/ ” joker_url = ” https://www.imdb.com/title/tt7286456/Серия Boys_URL = ” https://www.imdb.com/title/tt1190634/ ” Чтобы получить реквизиты фильма, позвоните эту функцию

getMovieDetails(boys_url)
{'title': 'The Boys (TV Series 2019– ) - IMDb',
 'ratingValue': '8.7',
 'ratingCount': '173,133',
 'name': 'The Boys            ',
 'subtext': '18+|1h|Action,Comedy,Crime|TV Series (2019– )',
 'summary_text': 'A group of vigilantes sets out to take down corrupt superheroes who abuse their superpowers.',
 'credits': {'Creator:': [{'link': '/name/nm0471392/', 'name': 'Eric Kripke'}],
  'Stars:': [{'link': '/name/nm0881631/', 'name': 'Karl Urban'},
   {'link': '/name/nm4425051/', 'name': 'Jack Quaid'},
   {'link': '/name/nm1102278/', 'name': 'Antony Starr'},
   {'link': 'fullcredits/', 'name': 'See full cast & crew'}]}}

Дополнительный контент, чтобы получить все члена экипажа и литью со своими ролью

import re
def getCrewData(url):
    crew_data = {
        "crew": []
    }
    r = requests.get(url=url)

    # Create a BeautifulSoup object
    soup = BeautifulSoup(r.text, 'html.parser')

    #page title
    title = soup.find('title')
    crew_data["title"] = title.string
    cast_list = soup.find("table", {"class" : "cast_list"})

    trows = cast_list.find_all('tr')

    for tr in trows:
        td = tr.find_all('td')
        if len(td)==4:
            row = [i.text for i in td]
            crew_data["crew"].append({
                "name":re.sub("[^a-zA-Z' ]+", '', row[1]).strip(),
                "character":re.sub("[^a-zA-Z' ]+", '', row[3]).strip()
            })
    return crew_data

Серия Boys_url = ” https://www.imdb.com/title/tt1190634/fullcredits/Фильм Tenet_url = ” https://www.imdb.com/title/tt6723592/fullcredits/

getCrewData(tenet_url)

Вывод: веб-соскоб всегда не является стабильным, когда изменения, сделанные на веб-страницы, это будет влияет на логику кода, которая ранее построен. Не все веб-сайт позволяют вам вскрыть их содержимое, некоторые использовать JavaScript для рендеринга страницы (построить одну Vue, Rect JS) в этом случае используйте SELENIUM, чтобы получить страницу. Используйте это только для использования в области образования.

Оригинал: “https://dev.to/magesh236/scrape-imdb-movie-rating-and-details-3a7c”