Очистить текст из нескольких элементов с одним и тем же именем (IMDB) - PullRequest
0 голосов
/ 17 февраля 2020
for year_url in years_url:

    # For every page in the interval 1-4
    for page in pages:

        # Make a get request
        response = requests.get('http://www.imdb.com/search/title?release_date=' + year_url +
        '&sort=num_votes,desc&page=' + page)

        # Parse the content of the request with BeautifulSoup
        page_html = BeautifulSoup(response.text, 'lxml')

        # Select all the 50 movie containers from a single page
        mv_containers = page_html.find_all('div', class_ = 'lister-item mode-advanced')

        # For every movie of these 50
        for container in mv_containers:
            # If the movie has a Metascore, then:
            if container.find('div', class_ = 'ratings-metascore') is not None:

                # Scrape the name
                name = container.h3.a.text
                names.append(name)

                # Scrape the genre
                genre = container.p.find('span', class_ = 'genre').text.rstrip().replace("\n","").split(",")
                genres.append(genre)


                # Scrape the runtime
                runtime = container.p.find('span', class_ = 'runtime').text
                runtimes.append(runtime)


                # Scrape the year
                year = container.h3.find('span', class_ = 'lister-item-year').text
                years.append(year)

                # Scrape the IMDB rating
                imdb = float(container.strong.text)
                imdb_ratings.append(imdb)

                # Scrape the Metascore
                m_score = container.find('span', class_ = 'metascore').text
                metascores.append(int(m_score))

                # Scrape the number of votes
                vote = container.find('span', attrs = {'name':'nv'})['data-value']
                votes.append(int(vote))

                # Scrape the GrossMill
                gross = int(container.find('span', text='Gross:').find_next('span')['data-value'].replace(',', ''))
                print(gross)
                grossmill.append(gross)

Я не могу создать данные о валовом сборе из вышеупомянутого голосования по URL-адресу, а брутто имеет одинаковые атрибуты, поэтому мне сложно получить данные по брутто по ссылке, указанной ниже. как бы я ни смог извлечь подсчет голосов. ссылка на url = "https://www.imdb.com/search/title/?release_date=2019&sort=num_votes, desc & page = 1 "

1 Ответ

0 голосов
/ 17 февраля 2020

Ваша ошибка означает, что для данного mov ie не было найдено span с text='Gross'. Как я вижу по веб-странице IMDB , которую вы просматриваете, бывает, что некоторые фильмы, хотя и имеют метаскор, не отображают брутто. Это относится к mov ie 1917.

. Прежде чем вызывать его с помощью метода find_next().

, необходимо сначала проверить наличие брутто * Replace:

gross = int(container.find('span', text='Gross:').find_next('span')['data-value'].replace(',', ''))

по:

gross = container.find('span', text='Gross:')
if gross:
    gross = int(gross.find_next('span')['data-value'].replace(',', ''))
...