Очистка данных с веб-сайта, который выполняет обработку данных на стороне сервера через DataTables и Ajax - PullRequest
1 голос
/ 09 февраля 2020

Я пытаюсь автоматизировать процедуру очистки данных с веб-сайта, который выполняет выборку данных на стороне сервера и загружает данные по запросу (при прокрутке вниз по этой таблице). После некоторого поиска в Google и просмотра кода их веб-сайта через DevTools я понимаю, что эта функциональность используется для ввода sh данных в таблицу с использованием JS и ajax. Ссылка API для извлечения данных с сервера, скорее всего, находится в сценарии php и не может быть получена.

Мне было интересно, можно ли каким-то образом автоматизировать эту процедуру извлечения (Python / R), чтобы мне не приходилось вручную прокручивать часы и копировать и вставлять данные в файл Excel?

1 Ответ

1 голос
/ 10 февраля 2020

https://www.deribit.com/ использует веб-сокет для извлечения этих данных, ajax не задействовано. Когда достигнут конец таблицы, запускается событие, которое вызывает эту функцию:

// found in btc-options.js
scrollTradesC: function () {
        var box = $('#tradesScrollC'), t;
        if (isTradesScrollingC) {
            return;
        }
        if (box.scrollTop() + box.innerHeight() >= 0.7*box[0].scrollHeight) {
            isTradesScrollingC = true;
            t = lastTradeCallId;
            if (t != 0) {
                reMoreTradesCall(t);
            } else {
                reMoreTradesCall(0);
            }
        }
    }

Затем запускается функция reMoreTradesCall:

reMoreTradesCall = function(data)
{
    if (validateSources([]))
        ws.send(enc(tuple(atom('pickle'), bin('document'), bin('... my token ...'), utf8_toByteArray(JSON.stringify(data)))));
    else
        console.log('Validation Error');
}

Вы можете найти веб-сокет реализация в main_bullet.js

Наблюдайте за сетевым подключением v2/ на вкладке Сеть веб-инспектора для просмотра полезных нагрузок фрейма запроса и ответа.

Соответствующий URL-адрес запроса wss://www.deribit.com/ws/api/v2/ и метод public/get_trade_volumes.

...