从url下载csv并使其成为python pandas的数据帧

2024-05-18 10:08:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,所以这里需要一些帮助。我有一个带有url列的数据框,其中有一个链接,允许我为每个链接下载CSV。我的目标是创建一个循环/whatever,这样我就可以运行一个命令,允许我下载、读取csv并为每一行创建一个数据框。任何帮助都将不胜感激。我在下面附上了数据框的一部分。如果链接不起作用(可能不行,您可以用“https://finance.yahoo.com/quote/GOOG/history?p=GOOG”(任何其他公司也可以)的链接替换它,然后导航到下载csv并使用该链接。

数据帧:

Symbol         Link
YI             https://query1.finance.yahoo.com/v7/finance/download/YI?period1=1383609600&period2=1541376000&interval=1d&events=history&crumb=PMHbxK/sU6E
PIH            https://query1.finance.yahoo.com/v7/finance/download/PIH?period1=1383609600&period2=1541376000&interval=1d&events=history&crumb=PMHbxK/sU6E
TURN           https://query1.finance.yahoo.com/v7/finance/download/TURN?period1=1383609600&period2=1541376000&interval=1d&events=history&crumb=PMHbxK/sU6E
FLWS           https://query1.finance.yahoo.com/v7/finance/download/FLWS?period1=1383609600&period2=1541376000&interval=1d&events=history&crumb=PMHbxK/sU6E

再次感谢。


Tags: 数据httpscom链接downloadeventshistoryyahoo
3条回答

我经常使用这个程序

import pandas as pd
import requests

url="<URL TO DOWNLOAD.CSV>"
s=requests.get(url).content
c=pd.read_csv(s)

你需要一个post请求并将内容发送到io。

import pandas as pd
import requests
import io

url = 'https://query1.finance.yahoo.com/v7/finance/download/GOOG'
params ={'period1':1538761929,
         'period2':1541443929,
         'interval':'1d',
         'events':'history',
         'crumb':'v4z6ZpmoP98',
        }

r = requests.post(url,data=params)
if r.ok:
    data = r.content.decode('utf8')
    df = pd.read_csv(io.StringIO(data))

为了得到这些参数,我只是跟着喜欢的,然后把所有的东西都复制了?’. 检查它们是否匹配;)

结果: enter image description here

首先将任务分解为更小的部分,您需要做的是:

  1. 使用链接在数据帧上迭代。

    for index, row in df.iterrows():
        url= row["Link"]
    
  2. 使用Python的requests库从Yahoo Finance下载JSON文件。这可能是困难的一部分,您需要在实际下载CSV文件之前获取cookies,更多信息hereherehere。使用cookie创建正确的URL后,您可以使用以下命令下载它:

    re = requests.get(URL)
    print(re.status_code) #status code 200 for successful download
    
  3. 也可以将响应保存到本地磁盘。
  4. 装上熊猫。

    df = pd.read_csv(file_name) #in case of saving file to disk
    df = pd.read_csv(re.content) #directly from the response
    

相关问题 更多 >