#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», но это также не дало никаких ошибок, поэтому это не сработало.