Ваш код в порядке.Отлично даже.Но вы никогда не получите «обновленный» HTML-код для веб-страницы после нажатия кнопки «Загрузить еще».Вот почему вы постоянно получаете одни и те же 25 обзоров.
Когда вы используете Selenium для управления веб-браузером, вы нажимаете кнопку «Загрузить еще».Это создает XHR-запрос (или более часто называемый AJAX-запрос), который вы можете увидеть на вкладке «Сеть» инструментов разработчика вашего веб-браузера.
Суть в том, что JavaScript (который запускается в веб-браузере ) обновляет страницу.Но в вашей программе на Python вы получаете только HTML один раз для страницы, статически использующей библиотеку запросов.
seed = 'https://www.imdb.com/title/tt4209788/reviews'
movie_review = requests.get(seed) #<-- SEE HERE? This is always the same HTML. You fetched in once in the beginning.
PATIENCE_TIME = 60
Чтобы решить эту проблему, вам нужно использовать Selenium, чтобы получить innerHTMLокна div, содержащего отзывы.Затем заставьте BeautifulSoup снова проанализировать HTML.Мы хотим избегать повторного захвата HTML-кода всей страницы, поскольку требуются вычислительные ресурсы для многократного анализа обновленного HTML-кода.
Итак, найдите div на странице, содержащей обзоры, ипроанализируйте это снова с BeautifulSoup.Примерно так должно работать:
while True:
try:
allReviewsDiv = driver.find_element_by_xpath("//div[@class='lister-list']")
allReviewsHTML = allReviewsDiv.get_attribute('innerHTML')
loadMoreButton = driver.find_element_by_xpath("//button[@class='ipl-load-more__button']")
review_soup = BeautifulSoup(allReviewsHTML, 'html.parser')
review_containers = review_soup.find_all('div', class_ ='imdb-user-review')
pdb.set_trace()
print('length: ',len(review_containers))
for review_container in review_containers:
review_title = review_container.find('a', class_ = 'title').text
print(review_title)
time.sleep(2)
loadMoreButton.click()
time.sleep(5)
except Exception as e:
print(e)
break