直接从网站下载 CSV 文件 link

Downloading CSV files directly from website link

目标:从网站下载 CSV 文件 link 直接到文件下载。

我经历了数十个线程,使用不同的方法下载 CSV 文件。每种方法都给我留下了 excel 文件的相同损坏格式,该文件不包含原始信息但包含一些代码。

我已经尝试将这些方法与来自其他网站的其他 link 一起使用,并且效果很好,这让我觉得来自这个特定网站的这些 excel 文件有一些不同之处,导致问题。

我当前的代码(许多不同版本之一,都产生相同的结果):

import requests
import shutil
import datetime
import csv

req = requests.get('https://cranedata.com/publications/download/mfi-daily-data/issue/2020-09-11/.csv', stream=True)
url_content = req.content
if req.status_code == 200:
    print(req.status_code == requests.codes.ok)
    print(requests.Response.content)
    csv_file = open('MFID200911 .csv', 'wb')
    csv_file.write(url_content)
    csv_file.close()

我认为没有问题,因为我有 200 和 true 作为 req 和 req.status_code == requests.codes.ok

的输出

这会生成一个 excel 文件,如下所示:https://prnt.sc/ugx7bv

而不是我从网站手动下载文件时看到的那个:https://prnt.sc/ugx7u4

我的最终目标是循环下载所有 CSV 文件,因为 link 上只有日期会发生变化,但是现在我只需要正确下载一个文件即可。

编辑:这是实现循环后的代码

 web = Browser()
web.go_to('https://cranedata.com/')
web.type(username , into='username')
web.type(password , into='password')
web.click('Login' , tag='login')

sdate = date(2009, 1, 1)   # start date
edate = date(2020, 9, 15)   # end date
delta = edate - sdate       # as timedelta
dates = [datetime.datetime(2009,4,6)+datetime.timedelta(dval) for dval in range(delta.days+1)];


for dateval in dates:
    web.go_to('https://cranedata.com/publications/download/mfi-daily-data/issue/' +dateval.strftime('%Y-%m-%d') + '/csv')

登录后可以使用twill or mechanize packages, as exemplified 直接获取文件

或者您可以使用自动化工具,例如 web bot 来模拟用户导航:

from webbot import Browser 
username = 'your_username'
password = 'your_password'
web = Browser()
web.go_to('https://cranedata.com/') 
web.type(username , into='username')
web.type(password , into='password') 
web.click('Login' , tag='login')
web.go_to('https://cranedata.com/publications/download/mfi-daily-data/issue/2020-09-11/.csv')