我目前正试图从以下链接下载csv.gz文件:https://www.cryptoarchive.com.au/bars/pair.正如您所看到的,用浏览器打开链接只需打开保存文件对话框。然而,将链接传递到请求或urlib只是下载HTML,而不是实际文件。
这是我目前正在尝试的方法:编辑:更新以反映我所做的更改。
url = "https://www.cryptoarchive.com.au/bars/pair"
file_name = "test.csv.gz"
headers = {"PLAY_SESSION": play_session}
r = requests.get(url, stream=True, headers=headers)
with open(file_name, "wb") as f:
for chunk in r.raw.stream(1024, decode_content=False):
if chunk:
f.write(chunk)
f.flush()
我能找到的唯一保存的cookie是PLAY_SESSION。将其设置为标题不会改变我得到的结果。
此外,我试着在登录页面上发布一个请求,如下所示:
login = "https://www.cryptoarchive.com.au/signup"
data = {"email": email,
"password": password,
"accept": "checked"}
with requests.Session() as s:
p = s.post(login, data=data)
print(p.text)
然而,这似乎也不起作用,我特别不知道该向登录页面传递什么,也不知道如何实际选中复选框。。。
仅从私人导航浏览url
就显示错误:
请先登录/注册。
要获取该文件,您需要首先登录到该网站。登录后,您可能会得到一个会话令牌、一些cookie或类似的东西,需要将其放入请求命令中。
@Daniel Argüelles和@Abhyudaya Sharma的回答都对我有所帮助。解决方案只是在登录网站后获取PLAY_SESSION cookie并将其传递给请求函数。
cookies = {"PLAY_SESSION": play_session}
url = "https://www.cryptoarchive.com.au/bars/pair"
r = requests.get(url, stream=True, cookies=cookies)
with open(file_name, "wb") as f:
for chunk in r.raw.stream(1024, decode_content=False):
if chunk:
f.write(chunk)
f.flush()