目标:我想从网站上下载几年前每天的数据。 此网站有一个登录名,每个页面上只有7个CSV文件,然后您必须单击“上一个”等来查看前7个CSV文件。理想情况下,我想下载所有这些到一个文件夹中的所有日常数据。 指向文件加载的链接遵循一种非常简单的格式,我试图利用这种格式:
https://cranedata.com/publications/download/mfi-daily-data/issue/2020-09-08/
只在每个日期更改结尾,不考虑周末。 我曾试图修改几个版本的代码,但最终没有找到任何有效的
#!/usr/bin/env ipython
# --------------------
import requests
import shutil
import datetime
# -----------------------------------------------------------------------------------
dates=[datetime.datetime(2019,1,1)+datetime.timedelta(dval) for dval in range(0,366)];
# -----------------------------------------------------------------------------------
for dateval in dates:
r = requests.get('https://cranedata.com/publications/download/mfi-daily-data/issue/'+dateval.strftime('%Y-%m-%d'), stream=True)
if r.status_code == 200:
with open(dateval.strftime('%Y%m%d')+".csv", 'wb') as f:
r.raw.decode_content = True
shutil.copyfileobj(r.raw, f)
# ---------------------------------------------------------------------------------
这似乎适用于其他网站上的其他文件,但当我下载CSV文件时,它们实际上没有数据
这是我的excel文件所说的,而不是实际数据: https://prnt.sc/ugju49
您需要向请求中添加身份验证信息。这可以使用“标头”完成,也可以通过“cookie”完成。您可以使用requests.Session对象来简化这两种情况
如果不知道哪些技术用于身份验证,就无法向您提供更多详细信息
很可能(从网站外观来看)它使用了服务器端会话。因此,在“与后端对话”时,标题中应该有类似于“会话id”或“sid”的内容。您需要打开浏览器的“开发人员工具”,仔细查看“请求头”。执行登录时,还将显示响应和响应头
如果您非常幸运,只要在会话开始时执行登录,使用
requests.Session
就足够了。大概是这样的:如果这不起作用,您需要仔细检查开发人员工具中的“网络”选项卡,找出感兴趣的部分并在代码中重现它们
哪些部分是“有趣的部分”取决于后端,没有进一步的细节,我不能说
相关问题 更多 >
编程相关推荐