Вытягивание всего текста (несколько тегов p) с помощью BeautifulSoup и Selenium возвращает [] - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь получить комментарии тега p в карточке обзора, в конечном итоге просматривая поиск на vivino.com по этой ссылке , используя BeautifulSoup и Selenium. Мне удалось открыть первую ссылку, но перетаскивание текста p в поля обзора возвращает [].

url = "https://www.vivino.com/explore?e=eJwNyTEOgCAQBdHbbA2F5e-8gbE2uKyERBYCaOT20swrJlVYSlFhjaHkPixTHtg34pmVyvzhwutqlO5uyid8bJwf7UeRyqKdMrw0pgYdPwIzGwQ="
driver = webdriver.Chrome('/Users/myname/Downloads/chromedriver')
driver.implicitly_wait(30)
driver.get(url)

python_button = driver.find_element_by_class_name('anchor__anchor--2QZvA')
python_button.click() 
soup = BeautifulSoup(driver.page_source, 'lxml')
print(soup.find_all('p'))

table = soup.findAll('div',attrs={"class":"reviewCard__reviewContainer--1kMJM"})
print(table)
driver.quit()

Может ли кто-нибудь посоветовать правильный способ получения комментариев? Так как на странице более 1 комментария, мне нужно l oop? Я также попробовал это с 'html .parser' вместо 'l xml'. Какой правильный использовать?

Большое спасибо за вашу помощь.

1 Ответ

0 голосов
/ 06 марта 2020

Вот что вам нужно сделать:

import atexit
from pprint import pprint

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.expected_conditions import visibility_of_all_elements_located
from selenium.webdriver.support.wait import WebDriverWait


def start_driver():
    driver = webdriver.Chrome()
    atexit.register(driver.quit)
    driver.maximize_window()
    return driver


def find_elements(driver, locator):
    return WebDriverWait(driver, 10, 2).until(visibility_of_all_elements_located(locator))


URL = "https://www.vivino.com/explore?e=eJwNyTEOgCAQBdHbbA2F5e-8gbE2uKyERBYCaOT20swrJlVYSlFhjaHkPixTHtg34pmVyvzhwutqlO5uyid8bJwf7UeRyqKdMrw0pgYdPwIzGwQ="
RESULTS = By.CSS_SELECTOR, "div[class*='vintageTitle'] > a"


def main():
    driver = start_driver()
    driver.get(URL)

    # note the results
    wines = []
    for element in find_elements(driver, RESULTS):
        link = element.get_attribute("href")
        name = element.find_element_by_css_selector("span[class*='vintageTitle__wine']").text
        wines.append((name, link))

    pprint(wines)

    # go extract details from each result's page
    for name, link in wines:
        print("getting comments for wine: ", name)
        driver.get(link)
        # you can do the rest ;)


if __name__ == '__main__':
    main()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...