技术交流微信【xicebloodx】,仅限交流,骚扰即拉黑,加微信请注明【技术交流】。
在使用tushare.get_today_all出现ValueError: No ':' found when decoding object value问题改如何解决呢?
这是你会发现,其实get_today_all从网页获取的数据时正常的,而进行json -> dataframe时出的错,经过拍错后,发现是因为网页上读取的json文件有问题的。
要进行一些字符的替换的;所以要找到源码对里面一个函数进行Fixed就OK,修改后的code如下。
def _parsing_dayprice_json(types=None, page=1):
"""
处理当日行情分页数据,格式为json
Parameters
------
pageNum:页码
return
-------
DataFrame 当日所有股票交易数据(DataFrame)
"""
ct._write_console()
request = Request(ct.SINA_DAY_PRICE_URL%(ct.P_TYPE['http'], ct.DOMAINS['vsf'],
ct.PAGES['jv'], types, page))
text = urlopen(request, timeout=10).read()
if text == 'null':
return None
reg = re.compile(r'\,(.*?)\:')
text = reg.sub(r',"\1":', text.decode('gbk') if ct.PY3 else text)
text = text.replace('"{"symbol', '{"symbol') # modify by xsophiax
text = text.replace('{symbol', '{"symbol"')
text = text.replace('""', '"') # add by xsophiax
if ct.PY3:
# text = text.decode('GBK')
jstr = json.dumps(text)
else:
jstr = json.dumps(text, encoding='GBK')
js = json.loads(jstr)
df = pd.DataFrame(pd.read_json(js, dtype={"code":object}),
columns=ct.DAY_TRADING_COLUMNS)
df = df.drop('symbol', axis=1)
# df = df.ix[df.volume > 0]
return df
def get_today_all():
ct._write_head()
df = _parsing_dayprice_json('hs_a', 1)
if df is not None:
for i in range(2, ct.PAGE_NUM[1]):
newdf = _parsing_dayprice_json('hs_a', i)
if newdf.shape[0] > 0:
df = df.append(newdf, ignore_index=True)
else:
break
df = df.append(_parsing_dayprice_json('shfxjs', 1),
ignore_index=True)
return df
现在调用get_today_all就可以了。
完成源码路径:https://blog.csdn.net/xsophiax/article/details/106613508