#python #selenium #web-scraping
#питон #селен #соскабливание паутины
Вопрос:
Я хочу удалить все отзывы из магазина Google Play для конкретного приложения. Я подготовил следующий сценарий:
# App Reviews Scraper import time from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from bs4 import BeautifulSoup url = "https://play.google.com/store/apps/details?id=com.android.chromeamp;hl=enamp;showAllReviews=true" # make request driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) driver.get(url) SCROLL_PAUSE_TIME = 5 # Get scroll height last_height = driver.execute_script("return document.body.scrollHeight") time.sleep(SCROLL_PAUSE_TIME) while True: # Scroll down to bottom driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # Wait to load page time.sleep(SCROLL_PAUSE_TIME) # Calculate new scroll height and compare with last scroll height new_height = driver.execute_script("return document.body.scrollHeight") if new_height == last_height: break last_height = new_height # Get everything inside lt;htmlgt; tag including javscript html = driver.execute_script("return document.getElementsByTagName('html')[0].innerHTML") soup = BeautifulSoup(html, 'html.parser') reviewer = [] date = [] # review text for span in soup.find_all("span", class_="X43Kjb"): reviewer.append(span.text) # review date for span in soup.find_all("span", class_="p2TkOb"): date.append(span.text) print(len(reviewer)) print(len(date))
Однако он всегда показывает только 203. Существует 35 474 218 отзывов. Итак, как я могу загрузить все отзывы?
Комментарии:
1. Если вы полностью проверите поведение, вы увидите, что вам также нужно посмотреть, появляется ли время от времени ссылка » Показать больше «.
Ответ №1:
wait=WebDriverWait(driver,1) try: wait.until(EC.element_to_be_clickable((By.XPATH,"//span[text()='Show More']"))).click() except: continue
Просто добавьте это, чтобы проверить наличие элемента «Показать больше» в вашем бесконечном свитке.
Импорт:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC
Комментарии:
1. «@Arundeep » большое спасибо, все работает нормально. Теперь столкнулся с другой проблемой: иногда в браузере появляется ошибка, и он застревает (не удалось прокрутить вниз, но ждать бесконечное время). Если я закрою браузер вручную, он не покажет никакого обзора. Есть ли возможность автоматически закрыть браузер, если произошла какая-либо ошибка, и будут показаны отзывы до этого момента?
2. driver.close() для закрытия, и вы можете поместить захватывающие элементы внутри прокрутки вниз.