我当时正在为一个大学项目抓取steamdb,在那里我可以使用BeatifulSoup和urllib获得几乎所有东西,但是有一件我无法工作的事情,因为没有链接。
有这些图表https://steamdb.info/app/570/graphs/,当您单击图表右上方的下载图标并选择任何一个下载选项时,都可以下载文件,但是当您检查元素时,标记信息中没有链接。
我发现,有一些onclick事件侦听器附加到这些下载div,并将这些函数跟踪到此js https://steamdb.info/static/js/vendor/highstock.20180826.js,如果您搜索“ highcharts-menu-item”(在该js中,那些下载div的课程),您将获得1个匹配项。但是我不知道该功能如何产生下载项目。任何人都可以解释一下下载魔术是如何发生的。
答案 0 :(得分:2)
我在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)
});