使用 Python 批量下载 PDF

Batch download PDF using Python

我正在尝试使用 Python 批量下载 PDF。手动下载文件的过程是:

  1. 打开https://www.ffiec.gov/nicpubweb/nicweb/HCSGreaterThan10B.aspx
  2. 单击列表中的任意银行。假设我选择第一个,JP Morgan.
  3. 单击创建报告 第 4 来自顶部的报告(即, 银行机构系统性风险报告 (FR Y-15))
  4. 单击您的财务报告请求已准备就绪
  5. 下载打开后的PDF url https://www.ffiec.gov/nicpubweb/NICDataCache/FRY15/FRY15_1039502_20160630.PDF
  6. 对列表中的每家银行重复此过程

要下载摩根大通的PDF,我的代码如下

import urllib2

url = 'https://www.ffiec.gov/nicpubweb/NICDataCache/FRY15/FRY15_1039502_20160630.PDF'
res = urllib2.urlopen(url)
with open('jpm.pdf', 'wb') as handle:
    handle.write(res.read())

该代码在我的机器上有效,但在其他人的机器上无效。我怀疑这与 url 的 NICDataCache 部分有关。我去过这个 url 所以代码知道从哪里获取 PDF;对于没有去过该网站的人,如果他们在上面打卡url,他们会得到

The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

我可以尝试让 Python 模拟上面的按钮点击,然后下载打开的 PDF,但想知道是否有更简单的方法来做到这一点 - 一种不需要我的方法访问我想从中下载的每一个 url。谢谢。

在银行列表中,注意括号中的整数。

假设:该整数唯一标识该银行。

这是创建缓存资源供您访问的url:

https://www.ffiec.gov/nicpubweb/nicweb/FinancialReport.aspx?parID_RSSD={bank_id}&parDT=20160630&parRptType=FRY15

注意 URL 中的 {bank_id}。我把它放在那里。如果您从银行列表中替换任何用括号包裹的给定整数,它将生成缓存资源。

那么,如果你访问这个URL:https://www.ffiec.gov/nicpubweb/NICDataCache/FRY15/FRY15_{bank_id}_20160630.PDF

它会回复该银行的 PDF。

本质上,您需要从第一页开始遍历银行列表,为您想要的每个银行生成缓存资源(通过使用第一个 URL 作为模板,注入银行编号) ,然后从第二个 URL 模板中提取 PDF。