Получите полный HTML для страницы с динамическими c расширенными контейнерами с python - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь получить полный HTML с сайта ratemyprofessors.com, однако внизу страницы есть кнопка «Загрузить дополнительные рейтинги», которая позволяет вам видеть больше комментариев.

Я используя запросы .get (url) и beautifulsoup, но это дает только первые 20 комментариев. Есть ли способ заставить страницу загрузить все комментарии, прежде чем она вернется?

Вот что я сейчас делаю, это дает 20 лучших комментариев, но не все из них.

    response = requests.get(url)
    soup = BeautifulSoup(response.text, "html.parser")
    comments = []
    for j in soup.findAll('div', attrs={'class': 'Comments__StyledComments-dzzyvm-0 dEfjGB'}):
        comments.append(j.text)

1 Ответ

0 голосов
/ 18 апреля 2020

BeautifulSoup - это больше HTML парсер для стати c страниц, чем рендерер для большего количества динамических c веб-приложений.

Вы можете достичь того, что хотите, используя безголовый браузер с помощью Selenium, выполнив рендеринг полную страницу и многократно нажимайте на дополнительную ссылку до тех пор, пока не будет больше загружено.

Пример: Нажатие на ссылку с помощью селена

Поскольку вы уже используете запросы, другая опция, которая может работать, это Requests- HTML, которая также поддерживает динамический рендеринг c. Для этого необходимо вызвать .html.render() для объекта ответа.

Пример: https://requests-html.kennethreitz.org/index.html#requests_html. HTML .render

Ссылка: Нажатие на ссылку с помощью BeautifulSoup в python

...