使用python从网站下载csv文件

时间:2015-11-04 07:08:12

标签: python csv

我有以下网站yahoo finance。我想在该页面上设置一个日期范围,例如1997年4月3日到2015年11月4日。一旦我设置了日期范围,我就会得到一个链接,在该页面下方的页面上将文件下载为csv。我想下载csv文件。但我希望所有这些都能以编程方式完成。我如何使用python实现这一目标。

3 个答案:

答案 0 :(得分:7)

这可能会有所帮助:

import requests
import shutil
def callme():
    url = "http://real-chart.finance.yahoo.com/table.csv?s=%5EBSESN&a=03&b=3&c=1997&d=10&e=4&f=2015&g=d&ignore=.csv"
    r = requests.get(url, verify=False,stream=True)
    if r.status_code!=200:
        print "Failure!!"
        exit()
    else:
        r.raw.decode_content = True
        with open("file1.csv", 'wb') as f:
            shutil.copyfileobj(r.raw, f)
        print "Success"

if __name__ == '__main__':
    callme()

如何获取此网址?
您可以通过右键单击>获取任何网站中的API调用列表。检查元素 - >网络。
现在,当您从浏览器发出任何请求时,它将列出所有API调用。

您可以根据需要拆分日期并将其传递给网址。您需要对Yahoo如何通过URL传递日期进行一些研究。

编辑1:此脚本将通过HTTP和HTTPS运行。

答案 1 :(得分:2)

您可以操纵网址以下载所需的CSV,例如从April 3, 1997Nov 4, 2015您可以将网址设置为

https://in.finance.yahoo.com/q/hp?s=%5EBSESN&a=[month]&b=[date]&c=[year]&d=[month]&e=[date]&f=[year]&g=[daily/weekly/monthly/dividends_only]

月份可以是0001020304最多11(注意:月份从00开始)

日期可以从01开始到31

年份采用格式'yyyy'

每日 - > d,每周 - > w,每月 - > m,仅限红利 - > v

现在您有了URL,然后下载您可以使用的CSV 链接:URL=URL&ignore=.csv

import urllib
url = '[URL]'
csv = urllib.urlopen(url).read() # returns type 'str'
with open('file.csv', 'w') as fx: # str, hence mode 'w'
fx.write(csv)

答案 2 :(得分:1)

您可以尝试selenium。还有一些其他轻量级工具,可以通过谷歌找到。

更新: 您似乎正在寻找this