如何解决直接从网站链接下载CSV文件
目标:直接从网站链接下载CSV文件并下载文件。
我使用不同的方法浏览了数十个线程来下载CSV文件。每种方法都给我留有一个excel文件相同的损坏格式,该文件不包含原始信息,但包含一些代码。
我尝试将这些方法与其他网站上的其他链接一起使用,并且效果很好,这使我认为与该特定网站上的这些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文件,但是现在我只需要获取一个文件即可正确下载。
编辑:这是实现循环后的代码
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包,例如mechanize或here包,以在登录后直接获取文件。
或者您可以使用自动化工具(例如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')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。