【问题标题】:Can't download csv.gz from website using Python无法使用 Python 从网站下载 csv.gz
【发布时间】:2021-11-19 10:55:51
【问题描述】:

我目前正在尝试从以下链接下载 csv.gz 文件:https://www.cryptoarchive.com.au/bars/pair。如您所见,使用浏览器打开链接只会打开保存文件对话框。但是,将链接传递给 requests 或 urllib 只会下载 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)

但是,这似乎也不起作用,我尤其无法弄清楚要传递给登录页面的内容或如何实际检查复选框...

【问题讨论】:

  • 我认为您需要登录才能获取 gzip 压缩文件。如果网站使用 cookie,您可以在手动登录后从浏览器的开发工具中获取它们。然后在发送请求时设置Cookie HTTP 标头。 developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cookie
  • 我觉得自己很愚蠢。感谢您为我指明正确的方向。我已经更新了帖子以反映我面临的新问题^^'

标签: python python-requests gzip


【解决方案1】:

只是从私人导航中浏览 url 会显示错误:

请先登录/注册。

要获取该文件,您需要先登录该站点。可能通过登录,您将获得一个会话令牌、一些 cookie 或类似的东西,您需要将它们放入请求命令中。

【讨论】:

  • 我觉得自己很愚蠢。感谢您为我指明正确的方向。我已经更新了帖子以反映我面临的新问题^^'
【解决方案2】:

@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()

【讨论】:

    猜你喜欢
    • 2021-12-01
    • 2021-12-30
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多