我尝试通过python脚本从this page导出CSV。复杂的部分是单击this page上的导出按钮后打开页面,开始下载,然后再次关闭,而不是仅仅将文件托管在静态的某个地方。我已尝试使用Requests库,但其返回的文件为空。
这就是我所做的:
url = 'http://aws.state.ak.us/ApocReports/CampaignDisclosure/CDExpenditures.aspx?exportAll=True&%3bexportFormat=CSV&%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)
我确定我错过了一些明显的东西,但是我把头发拉了出来。
答案 0 :(得分:0)
看起来文件是按需生成的,只要会话持续,网址就会保持有效。
从浏览器到Web服务器有多个请求(包括POST请求)。
因此,要通过代码获取这些文件,您必须模拟浏览器,可能包括会话状态等(在这种情况下也是__VIEWSTATE
)。
要查看整个通信,您可以在浏览器中使用开发人员工具(通常是F12,然后选择NET查看流量),或使用类似WireShark的内容。
换句话说,这不是一件容易的事。
如果这是开放的政府数据,最好只是询问政府的数据或要求可能直接链接到(未经过滤的)文件(例如,有时候有一个公共的ftp服务器) - 或者有时会有可用的API。
答案 1 :(得分:0)
该文件是按需创建的,但是您仍然可以下载它。本质上,您必须:
您可以在这里找到有效的代码(如果您不介意它是用R
编写的):Save response from web-scraping as csv file