Как мне очистить эту динамическую страницу? - PullRequest
1 голос
/ 14 июня 2019

Я пытаюсь отсканировать обзоры фильмов от Rotten Tomatoes. Примером может служить следующий фильм .

Если я прав, это динамическая веб-страница, поскольку при попытке перейти на следующую страницу отзывов URL-адрес веб-сайта не изменяется, а страница не обновляется. Кроме того, впоследствии, когда я пытаюсь очистить веб-страницы, используя утилиту, я могу получить отзывы только для этой первой страницы.

Я новичок в изучении веб-страниц и Selenium. Я попробовал следующий код, следуя интерактивному руководству ( Очистка страницы, обработанной JS ):

from selenium import webdriver

browser = webdriver.Chrome(executable_path="/Users/me/Downloads/chromedriver")

url = "https://www.rottentomatoes.com/m/notebook/reviews?type=user"

browser.get(url)

innerHTML = browser.execute_script("return document.body.innerHTML")

print(innerHTML)

Я ожидал увидеть отзывы на второй странице, но все равно отображаются только отзывы на первой странице. Что я должен сделать, чтобы иметь возможность очистить все отзывы от первой страницы?

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Если вы не знакомы с поиском в интернете через Python, я порекомендую вам книгу.

Web Scraping with Python, 2nd Edition

И я думаю, что использование requests вместо selenium более легкое и элегантное.

Следующий код может помочь вам

import time
import requests

headers = {
    'Referer': 'https://www.rottentomatoes.com/m/notebook/reviews?type=user',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36',
    'X-Requested-With': 'XMLHttpRequest',
}

url = 'https://www.rottentomatoes.com/napi/movie/00d1dd5b-5a41-3248-9080-3ef553dd9015/reviews/user'

payload = {
    'direction': 'next',
    'endCursor': '',
    'startCursor': '',
}

sess = requests.Session()

while True:
    r = sess.get(url, headers=headers, params=payload)
    data = r.json()

    if not data['pageInfo']['hasNextPage']:
        break

    payload['endCursor'] = data['pageInfo']['endCursor']
    payload['startCursor'] = data['pageInfo']['startCursor']

    for x in data['reviews']:
        user = x['user']['displayName']
        review = x['review']
        print(user, review)

    time.sleep(1)
0 голосов
/ 14 июня 2019

Я не знаю, почему вы используете селен. если вы проверяете элементы, когда нажимаете дальше, выполняется запрос json, который извлекает детали.

Для URL, который вы упомянули, я щелкнул по следующему и может найти следующий url .

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

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