【问题标题】:How to get the file if there is no link如果没有链接如何获取文件
【发布时间】:2018-10-23 19:44:43
【问题描述】:

我正在为一个大学项目抓取 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 匹配。但我无法弄清楚该功能是如何产生下载项目的。那么任何人都可以解释下载魔法是如何发生的。

【问题讨论】:

  • 那段代码被缩小了,阅读和理解起来非常困难。
  • HighCharts 的库动态构建图形并在浏览器创建临时图像 -- 没有与相关联的 物理 文件那...您将需要能够有效地“运行” JavaScript 以获取 HighCharts 图表。
  • @Barmar 你可以使用这个browserling.com/tools/js-prettify 使代码可读。
  • @TubbyStubby 缩进很好,用无意义的变量名仍然无法理解。
  • @TubbyStubby -- 安装 HighCharts 后,我直接从 phpDB 使用 CURL 语句,然后渲染页面 -- 真的,如果他们像我一样这样做那么不,您无法分辨他们的数据“来自”哪里——您可以使用开发人员工具中的“网络”选项卡,希望他们正在进行具有 JSON 或其他内容的 AJAX 调用有用的你可以利用——否则你将被困在解析/运行 JS 本身。

标签: javascript web-scraping beautifulsoup urllib


【解决方案1】:

我查看了 chrome 开发工具的网络选项卡以找到以下 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>

        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)
        });

【讨论】:

  • 首先感谢。虽然这并没有给我 xls 或 csv 文件,但@Zak 给出的方法和你发现的方法给出了似乎可读的原始数据。
  • 我猜测 JSON 格式的数据可以让你完成任务。除了上述答案之外,Chrome 开发工具中还提供了 Pretty Print,单击 {} 按钮。您还可以在这个漂亮的打印代码中搜索“CSV”,这将缩小 CSV 文件的生成范围。祝你好运:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-05
相关资源
最近更新 更多