Скачайте csv из URL и сделайте его пантом данных на python - PullRequest
0 голосов
/ 05 ноября 2018

Я новичок в Python, поэтому мне нужно немного помочь здесь. У меня есть фрейм данных со столбцом URL со ссылкой, которая позволяет мне загружать CSV для каждой ссылки. Моя цель - создать цикл / все, что работает, чтобы я мог запустить одну команду, которая позволит мне скачать, прочитать csv и создать фрейм данных для каждой из строк. Любая помощь будет оценена. Я приложил часть данных ниже. Если ссылка не работает (вероятно, нет, вы можете просто заменить ее ссылкой из https://finance.yahoo.com/quote/GOOG/history?p=GOOG' (любой другой компании) и перейти к загрузке CSV и использовать эту ссылку.

Dataframe:

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

Еще раз спасибо.

Ответы [ 4 ]

0 голосов
/ 05 ноября 2018

Если применить следующее к кадру данных, он поместит каждый из документов в массив np.array. Не в датафрейме (я не уверен, как туда добраться). Но это даст вам доступ ко всем файлам, и вам нужно только поместить их в df.

links = test['Link'].unique()

import requests
a=[]
for x in links:
     url=x
     s=requests.get(url).content
     a.append(s)

a[4] or np.array(a[4]).tolist() выводит весь файл только в неправильном формате.

Используйте 'https://api.iextrading.com/1.0/stock/GOOG/chart/5y?format=csv' вместо Yahoo, это гораздо более доступно.

0 голосов
/ 05 ноября 2018

Сначала разбейте задачу на более мелкие части, что вам нужно сделать, это:

  1. Перебор DataFrame со ссылками.

    for index, row in df.iterrows():
        url= row["Link"]
    
  2. Загрузите файл JSON из Yahoo Finance, используя библиотеку Python requests. Это, вероятно, трудная часть, вам нужно будет получить куки перед тем, как загружать CSV-файл, больше информации здесь , здесь и здесь . После того, как вы создадите правильный URL с помощью cookie, вы можете скачать его с помощью:

    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
    
0 голосов
/ 05 ноября 2018

Вам нужно отправить запрос и получить содержимое для 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

0 голосов
/ 05 ноября 2018

Я обычно использую эту процедуру

import pandas as pd
import requests

url="<URL TO DOWNLOAD.CSV>"
s=requests.get(url).content
c=pd.read_csv(s)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...