Как отслеживать постоянно обновляемое значение на веб-сайте? - PullRequest
1 голос
/ 26 мая 2020

Я новичок в веб-сканировании, и я не уверен, что является наиболее эффективным способом решения этой проблемы. Этот проект в основном находится в Python, но я открыт для использования других языков в целях повышения эффективности. цена какого-либо финансового актива. что после загрузки веб-сайта он постоянно обновляется по мере поступления новой информации. Я хочу субсекундную выборку одного такого значения, но, естественно, я не хочу бомбардировать сервер запросами, которые в любом случае нарушили бы точность.

Я думал о чем-то вроде загрузки веб-страницы с помощью селена или PyQt webkit, а затем запуска простого l oop, который отслеживает значение и обновляет базу данных по мере появления изменений. Я не ищу код, который я могу разобрать самостоятельно, но я не уверен, что это правильный способ go решения этой проблемы, или есть более эффективные способы.

Спасибо ты

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Это потенциально деструктивная операция и не будет работать ни с чем, объявленным с помощью const (что предотвращает переназначение). Вы можете попробовать «обернуть» данные, за которыми нужно следить, в прокси

В этом примере:

  1. Переменная commodities существует на странице и это тот, который вы хотите отслеживать.
  2. Функция track_commodities вводится и выполняется через Selenium. Он содержит небольшую базу данных, в которой записываются любые изменения.

// inject that function and call it via Selenium >>>
function track_commodities () {

  track_commodities.db = { gold: []
                         , silver: []
                         , copper: []
                         };

  commodities = 
    new Proxy(commodities, {
      set: (o, k, v) => {
        track_commodities.db[k].push(v);
        o[k] = v;
        return true;
      }
    });
}

track_commodities();
// <<<


// Normal execution of your web page...
commodities.gold = 20;
commodities.gold = 30;
commodities.gold = 40;
commodities.gold++;
commodities.gold++;


console.log(commodities.gold);
console.log(track_commodities.db.gold)
<!-- This is the JS value you need to track -->
<script>
let commodities = { gold: 0
                  , silver: 0
                  , copper: 0
                  };
</script>
0 голосов
/ 26 мая 2020

Я сделал именно то, о чем вы говорите, используя исключительно Python и Selenium. Я не понимаю, почему Python не подходит для вашего конкретного варианта использования c. Единственная проблема, которую я мог видеть, это то, что веб-страница постоянно (или медленно) изменяется.

Я столкнулся с проблемой, при которой веб-страница была изменена, и это произошло через мой Xpath. Все, что мне нужно было сделать, это исправить Xpath, чтобы он отражал новое местоположение, и он все еще работал.

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

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

...