Python - 从aspx网页捕获自动下载文件

时间:2017-02-27 19:31:05

标签: python asp.net csv

我尝试通过python脚本从this page导出CSV。复杂的部分是单击this page上的导出按钮后打开页面,开始下载,然后再次关闭,而不是仅仅将文件托管在静态的某个地方。我已尝试使用Requests库,但其返回的文件为空。

这就是我所做的:

url = 'http://aws.state.ak.us/ApocReports/CampaignDisclosure/CDExpenditures.aspx?exportAll=True&amp%3bexportFormat=CSV&amp%3bisExport=True%22+id%3d%22M_C_sCDTransactions_csfFilter_ExportDialog_hlAllCSV?exportAll=True&exportFormat=CSV&isExport=True'


with open('CD_Transactions_02-27-2017.CSV', "wb") as file:
    # get request
    response = get(url)
    # write to file
    file.write(response.content)

我确定我错过了一些明显的东西,但是我把头发拉了出来。

2 个答案:

答案 0 :(得分:0)

看起来文件是按需生成的,只要会话持续,网址就会保持有效。

从浏览器到Web服务器有多个请求(包括POST请求)。 因此,要通过代码获取这些文件,您必须模拟浏览器,可能包括会话状态等(在这种情况下也是__VIEWSTATE)。

要查看整个通信,您可以在浏览器中使用开发人员工具(通常是F12,然后选择NET查看流量),或使用类似WireShark的内容。

换句话说,这不是一件容易的事。

如果这是开放的政府数据,最好只是询问政府的数据或要求可能直接链接到(未经过滤的)文件(例如,有时候有一个公共的ftp服务器) - 或者有时会有可用的API。

答案 1 :(得分:0)

该文件是按需创建的,但是您仍然可以下载它。本质上,您必须:

  1. 建立会话以保存cookie和viewstate
  2. 提交表单以单击导出按钮
  3. 获取弹出的csv按钮后面的链接
  4. 点击该链接并下载文件

您可以在这里找到有效的代码(如果您不介意它是用R编写的):Save response from web-scraping as csv file