Python 谷歌财务错误:无效文字
我正试图为学校做一个人项目(股市预测),这时谷歌又开始行动了 我意识到谷歌金融在过去的一年里完全是垃圾,但直到今天早上,它似乎还在运作。 我第一次运行代码时出错了,尽管昨天代码运行得很好 因此,我尝试从实际的库页面运行一个示例代码: 还有Python 谷歌财务错误:无效文字,python,google-finance,stockquotes,Python,Google Finance,Stockquotes,我正试图为学校做一个人项目(股市预测),这时谷歌又开始行动了 我意识到谷歌金融在过去的一年里完全是垃圾,但直到今天早上,它似乎还在运作。 我第一次运行代码时出错了,尽管昨天代码运行得很好 因此,我尝试从实际的库页面运行一个示例代码: 还有 --------------------------------------------------------------------------- ValueError Traceback (m
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-2-df3429694fd0> in <module>()
9 }
10 # get price data (return pandas dataframe)
---> 11 df = get_price_data(param)
12 print(df)
13
/usr/local/lib/python3.6/dist-packages/googlefinance/client.py in get_price_data(query)
13 cols = price.split(",")
14 if cols[0][0] == 'a':
---> 15 basetime = int(cols[0][1:])
16 index.append(datetime.fromtimestamp(basetime))
17 data.append([float(cols[4]), float(cols[2]), float(cols[3]), float(cols[1]), int(cols[5])])
ValueError: invalid literal for int() with base 10: 'nd ...</span><br></div></div><div class="g"><h3 class="r"><a href="/url?q=https://en.wikipedia.org/wiki/DJI_(company)&sa=U&ved=0ahUKEwiB-e_gjMzcAhUpwlkKHTTUC74QFghGMAw&usg=AOvVaw1ugw
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
9 }
10#获取价格数据(返回数据帧)
--->11 df=获取价格数据(参数)
12打印(df)
13
/获取价格数据(查询)中的usr/local/lib/python3.6/dist-packages/googlefinance/client.py
13列=价格。拆分(“,”)
14如果cols[0][0]=“a”:
--->15 basetime=int(cols[0][1:]
16 index.append(datetime.fromtimestamp(basetime))
17数据。追加([float(cols[4])、float(cols[2])、float(cols[3])、float(cols[1])、int(cols[5]))
ValueError:以10为基数的int()的文本无效:“nd…”
示例代码有问题。如果您转到,您将获得最新版本,即使是很小的更新
我稍微修改了client.py
,输出没有问题
#!/usr/bin/env python
# coding: utf-8
import requests
from datetime import datetime
import pandas as pd
def get_price_data(query):
r = requests.get(
"https://finance.google.com/finance/getprices", params=query)
lines = r.text.splitlines()
data = []
index = []
basetime = 0
for price in lines:
cols = price.split(",")
if cols[0][0] == 'a':
basetime = int(cols[0][1:])
index.append(datetime.fromtimestamp(basetime))
data.append([float(cols[4]), float(cols[2]), float(
cols[3]), float(cols[1]), int(cols[5])])
elif cols[0][0].isdigit():
date = basetime + (int(cols[0]) * int(query['i']))
index.append(datetime.fromtimestamp(date))
data.append([float(cols[4]), float(cols[2]), float(
cols[3]), float(cols[1]), int(cols[5])])
return pd.DataFrame(data, index=index, columns=['Open', 'High', 'Low', 'Close', 'Volume'])
def get_closing_data(queries, period):
closing_data = []
for query in queries:
query['i'] = 86400
query['p'] = period
r = requests.get(
"https://finance.google.com/finance/getprices", params=query)
lines = r.text.splitlines()
data = []
index = []
basetime = 0
for price in lines:
cols = price.split(",")
if cols[0][0] == 'a':
basetime = int(cols[0][1:])
date = basetime
data.append(float(cols[1]))
index.append(datetime.fromtimestamp(date).date())
elif cols[0][0].isdigit():
date = basetime + (int(cols[0]) * int(query['i']))
data.append(float(cols[1]))
index.append(datetime.fromtimestamp(date).date())
s = pd.Series(data, index=index, name=query['q'])
closing_data.append(s[~s.index.duplicated(keep='last')])
return pd.concat(closing_data, axis=1)
def get_open_close_data(queries, period):
open_close_data = pd.DataFrame()
for query in queries:
query['i'] = 86400
query['p'] = period
r = requests.get(
"https://finance.google.com/finance/getprices", params=query)
lines = r.text.splitlines()
data = []
index = []
basetime = 0
for price in lines:
cols = price.split(",")
if cols[0][0] == 'a':
basetime = int(cols[0][1:])
date = basetime
data.append([float(cols[4]), float(cols[1])])
index.append(datetime.fromtimestamp(date).date())
elif cols[0][0].isdigit():
date = basetime + (int(cols[0]) * int(query['i']))
data.append([float(cols[4]), float(cols[1])])
index.append(datetime.fromtimestamp(date).date())
df = pd.DataFrame(data, index=index, columns=[
query['q'] + '_Open', query['q'] + '_Close'])
open_close_data = pd.concat(
[open_close_data, df[~df.index.duplicated(keep='last')]], axis=1)
return open_close_data
def get_prices_data(queries, period):
prices_data = pd.DataFrame()
for query in queries:
query['i'] = 86400
query['p'] = period
r = requests.get(
"https://finance.google.com/finance/getprices", params=query)
lines = r.text.splitlines()
data = []
index = []
basetime = 0
for price in lines:
cols = price.split(",")
if cols[0][0] == 'a':
basetime = int(cols[0][1:])
date = basetime
data.append([float(cols[4]), float(cols[2]), float(
cols[3]), float(cols[1]), int(cols[5])])
index.append(datetime.fromtimestamp(date).date())
elif cols[0][0].isdigit():
date = basetime + (int(cols[0]) * int(query['i']))
data.append([float(cols[4]), float(cols[2]), float(
cols[3]), float(cols[1]), int(cols[5])])
index.append(datetime.fromtimestamp(date).date())
df = pd.DataFrame(data, index=index, columns=[
query['q'] + '_Open', query['q'] + '_High', query['q'] + '_Low', query['q'] + '_Close', query['q'] + '_Volume'])
prices_data = pd.concat(
[prices_data, df[~df.index.duplicated(keep='last')]], axis=1)
return prices_data
def get_prices_time_data(queries, period, interval):
prices_time_data = pd.DataFrame()
for query in queries:
query['i'] = interval
query['p'] = period
r = requests.get(
"https://finance.google.com/finance/getprices", params=query)
lines = r.text.splitlines()
data = []
index = []
basetime = 0
for price in lines:
cols = price.split(",")
if cols[0][0] == 'a':
basetime = int(cols[0][1:])
date = basetime
data.append([float(cols[4]), float(cols[2]), float(
cols[3]), float(cols[1]), int(cols[5])])
index.append(datetime.fromtimestamp(date))
elif cols[0][0].isdigit():
date = basetime + (int(cols[0]) * int(query['i']))
data.append([float(cols[4]), float(cols[2]), float(
cols[3]), float(cols[1]), int(cols[5])])
index.append(datetime.fromtimestamp(date))
df = pd.DataFrame(data, index=index, columns=[
query['q'] + '_Open', query['q'] + '_High', query['q'] + '_Low', query['q'] + '_Close', query['q'] + '_Volume'])
prices_time_data = pd.concat(
[prices_time_data, df[~df.index.duplicated(keep='last')]], axis=1)
return prices_time_data
片段
输出
开盘量高。。。关闭
328405532 2017-08-01 15:00:00 21961.42 21990.96 ... 21963.92
328405532 2017-08-02 15:00:00 22004.36 22036.10 ... 22016.24
336824836 2017-08-03 15:00:00 22007.58 22044.85 ... 22026.10
278731064 2017-08-04 15:00:00 22058.39 22092.81 ... 22092.81
253635270 2017-08-07 15:00:00 22100.20 22121.15 ... 22118.42
213012378 2017-08-08 15:00:00 22095.14 22179.11 ... 22085.34
在过去的48小时左右,“.INX”
一直没有在我的谷歌工作表上更新.DJI
和.IXIC
仍在更新中,尽管我认为其中一个最近没有更新过。试试雅虎金融图书馆。。嗯,nd…
@NoahM。我在哪里找到的?我只是从google.finance library页面复制粘贴了代码,这是它吐出来的,而不是它在页面上应该有的内容@ᴡʜᴀᴄᴋᴀᴍᴀᴅᴏᴏᴅʟᴇ3000雅虎金融也不起作用<代码>YQResponseMalformedError:响应格式不正确。
@ᴡʜᴀᴄᴋᴀᴍᴀᴅᴏᴏᴅʟᴇ3000 tho修复雅虎财务
似乎有效,很抱歉没有跟进。你明白了吗?如果不是,我肯定还有另一个解决方案。不,我转到了雅虎财经:\。。。它们都偶尔工作,但雅虎似乎更为一致。
#!/usr/bin/env python
# coding: utf-8
import requests
from datetime import datetime
import pandas as pd
def get_price_data(query):
r = requests.get(
"https://finance.google.com/finance/getprices", params=query)
lines = r.text.splitlines()
data = []
index = []
basetime = 0
for price in lines:
cols = price.split(",")
if cols[0][0] == 'a':
basetime = int(cols[0][1:])
index.append(datetime.fromtimestamp(basetime))
data.append([float(cols[4]), float(cols[2]), float(
cols[3]), float(cols[1]), int(cols[5])])
elif cols[0][0].isdigit():
date = basetime + (int(cols[0]) * int(query['i']))
index.append(datetime.fromtimestamp(date))
data.append([float(cols[4]), float(cols[2]), float(
cols[3]), float(cols[1]), int(cols[5])])
return pd.DataFrame(data, index=index, columns=['Open', 'High', 'Low', 'Close', 'Volume'])
def get_closing_data(queries, period):
closing_data = []
for query in queries:
query['i'] = 86400
query['p'] = period
r = requests.get(
"https://finance.google.com/finance/getprices", params=query)
lines = r.text.splitlines()
data = []
index = []
basetime = 0
for price in lines:
cols = price.split(",")
if cols[0][0] == 'a':
basetime = int(cols[0][1:])
date = basetime
data.append(float(cols[1]))
index.append(datetime.fromtimestamp(date).date())
elif cols[0][0].isdigit():
date = basetime + (int(cols[0]) * int(query['i']))
data.append(float(cols[1]))
index.append(datetime.fromtimestamp(date).date())
s = pd.Series(data, index=index, name=query['q'])
closing_data.append(s[~s.index.duplicated(keep='last')])
return pd.concat(closing_data, axis=1)
def get_open_close_data(queries, period):
open_close_data = pd.DataFrame()
for query in queries:
query['i'] = 86400
query['p'] = period
r = requests.get(
"https://finance.google.com/finance/getprices", params=query)
lines = r.text.splitlines()
data = []
index = []
basetime = 0
for price in lines:
cols = price.split(",")
if cols[0][0] == 'a':
basetime = int(cols[0][1:])
date = basetime
data.append([float(cols[4]), float(cols[1])])
index.append(datetime.fromtimestamp(date).date())
elif cols[0][0].isdigit():
date = basetime + (int(cols[0]) * int(query['i']))
data.append([float(cols[4]), float(cols[1])])
index.append(datetime.fromtimestamp(date).date())
df = pd.DataFrame(data, index=index, columns=[
query['q'] + '_Open', query['q'] + '_Close'])
open_close_data = pd.concat(
[open_close_data, df[~df.index.duplicated(keep='last')]], axis=1)
return open_close_data
def get_prices_data(queries, period):
prices_data = pd.DataFrame()
for query in queries:
query['i'] = 86400
query['p'] = period
r = requests.get(
"https://finance.google.com/finance/getprices", params=query)
lines = r.text.splitlines()
data = []
index = []
basetime = 0
for price in lines:
cols = price.split(",")
if cols[0][0] == 'a':
basetime = int(cols[0][1:])
date = basetime
data.append([float(cols[4]), float(cols[2]), float(
cols[3]), float(cols[1]), int(cols[5])])
index.append(datetime.fromtimestamp(date).date())
elif cols[0][0].isdigit():
date = basetime + (int(cols[0]) * int(query['i']))
data.append([float(cols[4]), float(cols[2]), float(
cols[3]), float(cols[1]), int(cols[5])])
index.append(datetime.fromtimestamp(date).date())
df = pd.DataFrame(data, index=index, columns=[
query['q'] + '_Open', query['q'] + '_High', query['q'] + '_Low', query['q'] + '_Close', query['q'] + '_Volume'])
prices_data = pd.concat(
[prices_data, df[~df.index.duplicated(keep='last')]], axis=1)
return prices_data
def get_prices_time_data(queries, period, interval):
prices_time_data = pd.DataFrame()
for query in queries:
query['i'] = interval
query['p'] = period
r = requests.get(
"https://finance.google.com/finance/getprices", params=query)
lines = r.text.splitlines()
data = []
index = []
basetime = 0
for price in lines:
cols = price.split(",")
if cols[0][0] == 'a':
basetime = int(cols[0][1:])
date = basetime
data.append([float(cols[4]), float(cols[2]), float(
cols[3]), float(cols[1]), int(cols[5])])
index.append(datetime.fromtimestamp(date))
elif cols[0][0].isdigit():
date = basetime + (int(cols[0]) * int(query['i']))
data.append([float(cols[4]), float(cols[2]), float(
cols[3]), float(cols[1]), int(cols[5])])
index.append(datetime.fromtimestamp(date))
df = pd.DataFrame(data, index=index, columns=[
query['q'] + '_Open', query['q'] + '_High', query['q'] + '_Low', query['q'] + '_Close', query['q'] + '_Volume'])
prices_time_data = pd.concat(
[prices_time_data, df[~df.index.duplicated(keep='last')]], axis=1)
return prices_time_data
params = {
'q': ".DJI", # Stock symbol (ex: "AAPL")
'i': "86400", # Interval size in seconds ("86400" = 1 day intervals)
# Stock exchange symbol on which stock is traded (ex: "NASD")
'x': "INDEXDJX",
'p': "1Y" # Period (Ex: "1Y" = 1 year)
}
df = get_price_data(params)
print(df)