Самый быстрый способ получить динамически обновляемый HTML-контент с сайта? - PullRequest
0 голосов
/ 10 октября 2019

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

Ответы [ 3 ]

3 голосов
/ 10 октября 2019

Нет, вы застряли во время ожидания Selenium с рендерингом

Для динамического HTML требуется полный браузер. Там не так много переговоров с этим. Если ваши страницы отдельные и разные, то есть вы просматриваете stocks.com/oilandgas, а также stocks.com/agriculture, есть возможность ускорить процесс.

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

Предостережение заключается в том, что оно будет ускоряться только в том случае, если узким местом (что вызывает медлительность) является отображение сайта.

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

На самом деле, Дэниел Фаррелл ниже предполагает, что это улучшило бы скорость сети. Вы можете дать этому шанс.

0 голосов
/ 10 октября 2019

Существует два API, которые вы можете использовать для получения сводной информации и профиля компании на основе тикера. Вы можете использовать более быстрые запросы и Session для эффективности, чтобы делать запросы на эту информацию.

import requests

tickers = ['FB']
results = {}

with requests.Session() as s:
    for ticker in tickers:
        results[ticker] = {}
        r = s.get(f'https://api.nasdaq.com/api/quote/{ticker}/summary?assetclass=stocks').json()
        results[ticker]['summary'] = r
        r = s.get(f'https://api.nasdaq.com/api/company/{ticker}/company-profile').json()
        results[ticker]['profile'] = r
0 голосов
/ 10 октября 2019

Этот сайт получает данные из XHR

network tab

, так что вы можете просто загрузить их запросами и json.loads, что уже намного быстрее.

Что касается получения обновленного HTML быстрее, чем опрос, то есть некоторые фреймворки (кукловод), которые могут отправлять события обновления из браузера в основной скрипт, но AFAIK нет способа сделать это в Python.

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