如何自动下载网站生成的电子表格?

2024-09-19 23:33:29 发布

您现在位置:Python中文网/ 问答频道 /正文

请容忍我,我是一个极端的新手,当谈到这种东西。我正在尝试创建一个从网站生成的excel电子表格的重复自动下载。我不知道怎么做,也不知道用什么方法

网站是:https://transparentdata.idaho.gov/data/#/29262

这上面有一个链接(右上角的“下载”),可以生成一个excel文件,其中包含所有州雇员及其工资率。我想让它自动下载这个电子表格每周一次,以便我可以比较数据随着时间的推移。有人能解释一下如何自动下载吗

先谢谢你


Tags: 文件数据方法httpsdata网站链接时间
1条回答
网友
1楼 · 发布于 2024-09-19 23:33:29

使用Firefox,我打开了web开发者工具>;我注意到,当您单击下载>;导出当前视图>;确认后,它会触发一个POST请求,该请求将返回一个作业id,您可以对其结果进行轮询:

使用cmdline中的cURL(POST用 data-raw隐式表示):

$ curl 'https://transparentdata.idaho.gov/api/transactions/v2/export/df44b6b3-0697-4764-88b4-8de532ef5748' -H 'Content-Type: application/json'  data-raw '{"report_id":29262,"query_params":{},"amount_column_state":{"total":141323290.18,"column_name":"Pay Rate ($)"}}'
{"job_id":"7d3dc5b8-dbbb-44ba-8eac-7a3ed8f9d226"}

然后,您可以使用该id继续轮询GET请求,直到“状态”处于运行状态而不是“完成”:

$ curl 'https://transparentdata.idaho.gov/api/v2/async_jobs/7d3dc5b8-dbbb-44ba-8eac-7a3ed8f9d226' |jq
{
  "id": "7d3dc5b8-dbbb-44ba-8eac-7a3ed8f9d226",
  "state": "running",
  "job_type": "GridDataApi::Dataset::Export::ExportUrl",
  "timestamps": {
    "created_at": "2021-02-26T11:44:58.852-08:00",
    "started_at": "2021-02-26T11:44:58.883-08:00"
  }
}

然后有效载荷将变为:

$ curl 'https://transparentdata.idaho.gov/api/v2/async_jobs/7d3dc5b8-dbbb-44ba-8eac-7a3ed8f9d226' |jq
{
  "id": "7d3dc5b8-dbbb-44ba-8eac-7a3ed8f9d226",
  "state": "finished",
  "job_type": "GridDataApi::Dataset::Export::ExportUrl",
  "timestamps": {
    "created_at": "2021-02-26T11:44:58.852-08:00",
    "started_at": "2021-02-26T11:44:58.883-08:00",
    "finished_at": "2021-02-26T11:45:08.255-08:00"
  },
  "job_result": {
    "url": "https://s3.amazonaws.com/og-datamanager-uploads/production/grid_data_api/dataset_filtered_exports/d9d94de7-d9d4-4dde-927e-81d8facaeecd/csvs/original/dataset_filtered_export_scratch20210226-127461-7hofsf.csv?1614369247"
  }
}

最后,您可以在“作业结果”中使用该url>;“url”下载您要查找的csv

使用^{}将其转换为Python应该相当容易,这里也有数以千计的指南和帖子

为了安排每周运行,您可以使用crontab或其他类似工具,具体取决于您的操作系统


这是python版本;需要requestspip install requests):

>>> import requests
>>> import time
>>> 
>>> export_url = 'https://transparentdata.idaho.gov/api/transactions/v2/export/df44b6b3-0697-4764-88b4-8de532ef5748'
>>> export_json = {"report_id": 29262, "query_params": {}, "amount_column_state": {"total": 141323290.18, "column_name": "Pay Rate ($)"}}
>>> polling_base_url = 'https://transparentdata.idaho.gov/api/v2/async_jobs/'
>>> 
>>> def extract_url():
...   export_req = requests.post(export_url, json=export_json)
...   polling_id = export_req.json()['job_id']
...   query_state = None
...   while query_state != "finished":
...     time.sleep(5)
...     result_req = requests.get(polling_base_url + polling_id)
...     query_state = result_req.json()['state']
...   return result_req.json()['job_result']['url']
... 
>>> extract_url()
'https://s3.amazonaws.com/og-datamanager-uploads/production/grid_data_api/dataset_filtered_exports/479af43d-b28d-4fad-b885-41cf74998039/csvs/original/dataset_filtered_export_scratch20210301-7-1uex46m.csv?1614573842'

相关问题 更多 >