Как получить файл, если нет ссылки

1

Я разбирал steamdb для университетского проекта, где мне удалось получить почти все, используя BeatifulSoup и urllib, но есть одна вещь, которую я не могу заставить работать, потому что нет ссылок на нее.

Эти диаграммы https://steamdb.info/app/570/graphs/, когда вы нажимаете на значок загрузки в верхней правой части графика и выбираете любой вариант загрузки, вы можете загрузить файл, но нет ссылок в тегах когда вы проверяете элемент.

Я обнаружил, что есть некоторые прослушиватели событий onclick, прикрепленные к этим загружаемым div, и прослеживают эти функции к этому js https://steamdb.info/static/js/vendor/highstock.20180826.js и в этом js, если вы ищете "highcharts-menu-item" (который является классом для тех, кто загружает div), вы получаете ровно 1 совпадение. Но я не мог понять, как эта функция создает элемент загрузки. Так может кто-нибудь объяснить, как происходит магия загрузки.

  • 0
    Этот код минимизирован, его чрезвычайно сложно читать и понимать.
  • 1
    HighCharts строит графики на лету и создает временные изображения в браузере - с этим не связано никаких физических файлов ... Вам понадобится возможность эффективно «запускать» JavaScript, чтобы получить HighCharts графики.
Показать ещё 6 комментариев
Теги:
web-scraping
beautifulsoup
urllib

1 ответ

2
Лучший ответ

Я просмотрел вкладку сети инструментов chrome dev, чтобы найти следующую конечную точку API (щелкните вкладку "Ответ", чтобы увидеть данные JSON): https://steamdb.info/api/GetGraph/?type=concurrent_max&appid=570

Что соответствует этому элементу:

<iframe src="https://steamdb.info/embed/?appid=570" height="389px" width="100%" scrolling="no" frameborder="0"></iframe>

Изображение 174551

        a.Chart.prototype.getCSV = function(a) {
        var f = ""
          , h = this.getDataRows()
          , d = this.options.exporting.csv
          , l = m(d.decimalPoint, "," !== d.itemDelimiter && a ? (1.1).toLocaleString()[1] : ".")
          , e = m(d.itemDelimiter, "," === l ? ";" : ",")
          , p = d.lineDelimiter;
        c(h, function(a, d) {
            for (var c, g = a.length; g--; )
                c = a[g],
                "string" === typeof c && (c = '"' + c + '"'),
                "number" === typeof c && "." !== l && (c = c.toString().replace(".", l)),
                a[g] = c;
            f += a.join(e);
            d < h.length - 1 && (f += p)
        });
  • 1
    Прежде всего, спасибо. Хотя это не дает мне файл xls или csv, но подход, данный @Zak, и то, что вы нашли, дает необработанные данные, которые кажутся читаемыми.
  • 1
    Я предположил, что данные в формате JSON позволят вам выполнить вашу задачу. В дополнение к ответам выше, Pretty Print доступна в инструментах Chrome Dev, нажмите кнопку {} . Вы также можете найти в этом симпатичном печатном коде «CSV», который сузит генерацию файла CSV. Удачи :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню