#python #selenium #selenium-webdriver #beautifulsoup #selenium-chromedriver
#python #selenium #selenium-webdriver #beautifulsoup #selenium-chromedriver
Вопрос:
Я пытаюсь собрать отзывы с динамического веб-сайта (страницы). Я пробовал приведенные ниже коды, но ни один из них не возвращает отзывы.
использование BeautifulSoup:
my_url = 'same above link'
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()
page_soup = bs(page_html, "html.parser")
revs = page_soup.findAll("div", {"id":"product-comment-list"})
print(revs)
этот код возвращает : []
Использование Selenium:
chrome_path = r"C:chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
driver.get("same link above")
elm_revs = driver.find_element_by_xpath('//a[@data-tab-name="comments"]')
driver.implicitly_wait(5)
driver.execute_script("arguments[0].click();", elm_revs)
try:
revs = WebDriverWait(driver, 10).until(
EC.presence_of_all_elements_located((By.ID, "product-comment-list"))
)
finally:
driver.quit()
print(revs.text)
time.sleep(5)
driver.quit()
этот код возвращает: urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=52205): Max retries exceeded with url: /session/63eeb4529f25314429dc7bf2926e010a/element/2ba52c02-56e8-4de8-8432-5e9148c2fcec/text (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x0000018BE37DE370>: Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it'))
или если я использую
try:
revs = WebDriverWait(driver, 10).until(
EC.presence_of_all_elements_located((By.ID, "product-comment-list"))
)
finally:
print(revs.text)
это ничего не возвращает. просто пустой вывод!
Комбинированное использование BeautifulSoup и Selenium:
chrome_path = r"C:chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
driver.get("same above link")
elm_revs = driver.find_element_by_xpath('//a[@data-tab-name="comments"]')
page = driver.execute_script("arguments[0].click();", elm_revs)
html = driver.page_source
page_soup = bs(html, "html.parser")
for tag in page_soup.findAll('id')
print(tag.text)
и это возвращает: []
Комментарии:
1. в вашем ответе selenium вы не получили доступ к .text . Я также не вижу этого идентификатора.
Ответ №1:
Две проблемы: у вас есть только один комментарий к продукту и печать элемента с помощью .text.
revs = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "product-comment-list")))
print(revs.text)
Комментарии:
1. спасибо, что обратились, но я тоже пробовал это, и это приводит меня к ошибкам, которые я добавлю в Selenium часть кода.