Недостающие данные после очистки

#python #pandas #web-scraping #beautifulsoup #splinter

#python #pandas #веб-очистка #beautifulsoup #расщепление

Вопрос:

Я пытаюсь очистить данные Google о 250 лучших рейтингах фильмов IMDB.

 movie_list = top_250_imdb["Title"]

base_url = 'https://www.google.com/search?q='

streaming = []
title = []
price = []

for movie in movie_list:
    query_url = (f'{base_url}{movie}')

    browser.visit(query_url)

    time.sleep(5)

    soup = bs(browser.html, 'lxml')


    results1 = soup.find_all('div', class_ = 'ellip bclEt')

    for result in results1:
        streaming.append(result.text)
        title.append(movie.capitalize())

    results2 = soup.find_all('div', class_ = 'ellip rsj3fb')

    for result in results2:
        price.append(result.text)
  

После очистки я получил оба len(streaming) и len(title) = 1297
но len(price) = 1296

Я не смог создать DataFrame, потому что они разной длины.

Что пошло не так и как мне это исправить?

Комментарии:

1. Что такое streaming и price на странице результатов поиска Google?

Ответ №1:

Я думаю, что одно из значений в price равно NaN… Не знаю, как решить, но вы могли бы получить помощь с этим…

Попробуйте создать фрейм данных только с ценой… Затем заполните значение NaN с помощью функции fillna, а затем соедините этот ценовой фрейм данных с вашим основным фреймом данных….

Немного длинновато, но может сработать

Ответ №2:

здесь требуется лишь небольшое изменение, чтобы отслеживать недостающие значения…

     results2 = soup.find_all('div', class_ = 'ellip rsj3fb')

    for result in results2:
        if result is not None :
            p = None #u can even replace with 0 but for our convinience it is None here    
        else :
            p = result.text
        price.append(p)
  

теперь вы можете проверить длину списка с именем «цена», и это недостающее количество также будет добавлено

вы можете добавить этот фрагмент кода, одновременно добавляя значения в списки «streaming» и «title», чтобы при обнаружении каких-либо отсутствующих значений он заменял предоставленное значение вместо отказа от этого действия.

просто замените приведенный выше код на приведенный ниже и просто взгляните на отступ, и он отлично работает.

 movie_list = top_250_imdb["Title"]

base_url = 'https://www.google.com/search?q='

streaming = []
title = []
price = []

for movie in movie_list:
    query_url = (f'{base_url}{movie}')

    browser.visit(query_url)

    time.sleep(5)

    soup = bs(browser.html, 'lxml')


    results1 = soup.find_all('div', class_ = 'ellip bclEt')

    for result in results1:
        streaming.append(result.text)
        title.append(movie.capitalize())

    results2 = soup.find_all('div', class_ = 'ellip rsj3fb')

    for result in results2:
        if result is not None :
            p = None #u can even replace with 0 but for our convinience it is None here    
        else :
            p = result.text
        price.append(p)
  

Надеюсь, это поможет..

Комментарии:

1. спасибо, я пытался, но это не сработало. Например, фильм «Однажды на Западе» доступен на CBS, но у него нет цены, поэтому я не смог наскрести цену на CBS. Я попытался использовать «Try Except», но это также не дало никаких ошибок, поэтому это не сработало.