【问题标题】:Requests download a file which has a javascript on-click download?请求下载具有 javascript 点击下载的文件?
【发布时间】:2021-03-17 14:22:29
【问题描述】:

我想从以下网址下载文件:

url = "https://www.nseindia.com/companies-listing/corporate-filings-actions"

# Download(.csv) is the element I have to click.

# the following code doesn't work.
header = {
        'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:65.0) Gecko/20100101 Firefox/65.0',
        "X-Requested-With": "XMLHttpRequest"
    }
    r = requests.get(url, stream=True, timeout=20, headers=header)
    with open("/home/pms/corp_action", 'wb') as fd:
        for chunk in r.iter_content(chunk_size=chunk_size):
            fd.write(chunk)
# The element on inspection

<a id="CFcorpactionsEquity-download" data-url="" href="javascript:downloadCSV('CFcorpactionsEquity-download')"><img src="/assets/images/icon-xls.svg" alt=""> Download (.csv)</a>

我正在尝试弄清楚如何使用请求来下载文件,并且我非常有兴趣了解如何识别正确的 params 或实现此目的所需的其他内容。

【问题讨论】:

  • “不起作用”到底是什么意思。您是否收到错误,没有任何反应,文件是否有错误的输出?
  • @mousetail 我得到一个包含headbody 的文件基本上说:找不到资源。
  • 请尽量避免在您的帖子中添加“TIA”和其他闲聊内容。
  • 我有时会提供以下建议:请注意,我们更喜欢这里的技术写作风格。我们轻轻地劝阻问候,希望你能帮助,谢谢,提前感谢,感谢信,问候,亲切的问候,签名,请你能帮助,聊天材料和缩写 txtspk,恳求,你多久了被卡住、投票建议、元评论等。只需解释您的问题,并展示您尝试过的内容、预期的内容以及实际发生的情况。

标签: javascript python python-requests


【解决方案1】:

问题可能不是你想的那样。通常当您在a 标记中使用href 时,它是一个与您提供的一样的URL 链接。 在这种情况下,它是一个名为 downloadCSV 的调用 Java Script 函数。你可以在这里找到这个函数:corporate-filings.js - 它从 linbe 4710 开始:

function downloadCSV(id) {
  try {
    var csvUrl = void 0;
    if ($("#" + id).data("url") !== "") {
      csvUrl = $("#" + id).data("url") + "&csv=true";
    } else {
      csvUrl = "/api/" + activeApiName + (activeApiName.includes("?") ? "&" : "?") + "index=" + innerActiveTab + "&csv=true";
    }
    window.open(csvUrl, "_blank");
  } catch (e) {
    console.log("downloadCSV", e.message);
  }
}

它使用activeApiName 之类的外部变量将使用window.open(csvUrl, "_blank"); 在新页面上将用户重定向到的URL 粘在一起

但还有一种更简单的方法可以评估文件的来源。我刚刚下载它并检查了它来自的 URL。这是https://www.nseindia.com/api/corporates-corporateActions?index=equities&amp;csv=true。对于python中的实现,我建议你基本上复制粘贴this solution并替换URL。唯一的问题可能是网站所有者可能会更改 downloadCSV 函数的工作方式或 activeApiName 的值,您将不得不再次抓取它。

【讨论】:

  • 感谢您的详细解答。我尝试了链接上的解决方案,我仍然得到相同的文件,即具有Resource not found 的文件。使用了api 网址。评估文件来源的更简单方法是什么?
  • 仅供参考,它是 scrape 不是废品。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-23
  • 2013-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-20
  • 2015-03-21
相关资源
最近更新 更多