req = requests.get(url,headers=headers)
req.content.decode('gb18030')
req = req.text
data = re.search(r'"trends":([\s\S]*?)$',req).group(1)[:-1] #抽取json中的trend
下面是结果:
["2019-09-23 09:30,3141.17,3141.17,3141.17,3141.17,1426862,1585918784.00,3141.802","2019-09-23 09:31,3141.13,3132.26,3141.13,3131.29,3343987,3873450992.00,3130.923","2019-09-23 09:32,3132.32,3130.71,3132.32,3130.71,2004182,2412469456.00,3128.565","2019-09-23 09:33,3131.32,3129.69,3131.32,3128.78,2046704,2409758864.00,3126.849","2019-09-23 09:34,3129.14,3124.22,3129.14,3124.00,2474169,2897764160.00,3122.836","2019-09-23 09:35,3123.15,3121.87,3123.15,3120.24,2649273,2978789472.00,3120.471","2019-09-23 09:36,3123.00,3123.42,3123.42,3122.32,2135505,2555154336.00,3123.120"]
现在要这种csv格式:
日期 代码 名称 最新价 涨跌幅 涨跌额 成交量 成交额
2019-09-23 3141.17 3141.17 3141.17 3141.17 1426862 1585918784.00
我做的话可能会做个循环将数据写入dataframe中,再转为csv文件
但如果你只是要股票数据的话你可以尝试用tushare.tushare获取的数据本身就是dataframe,可以很轻易的转为csv文件
我试过dataframe,这种形式的数据没有键,会报错的,然后我又想转成列表,按照index取值后按逗号分隔插入到表里,结果转列表都报错 头都炸了
@迁羽:
var = ["2019-09-23 09:30,3141.17,3141.17,3141.17,3141.17,1426862,1585918784.00,3141.802","2019-09-23 09:31,3141.13,3132.26,3141.13,3131.29,3343987,3873450992.00,3130.923","2019-09-23 09:32,3132.32,3130.71,3132.32,3130.71,2004182,2412469456.00,3128.565","2019-09-23 09:33,3131.32,3129.69,3131.32,3128.78,2046704,2409758864.00,3126.849","2019-09-23 09:34,3129.14,3124.22,3129.14,3124.00,2474169,2897764160.00,3122.836","2019-09-23 09:35,3123.15,3121.87,3123.15,3120.24,2649273,2978789472.00,3120.471","2019-09-23 09:36,3123.00,3123.42,3123.42,3122.32,2135505,2555154336.00,3123.120"]
df = pd.DataFrame({'日期':'','代码':'', '名称':'','最新价':'','涨跌幅':'','涨跌额':'','成交量':'','成交额':''},index=[1])
col1 = []
col2 = []
col3 = []
col4 = []
col5 = []
col6 = []
col7 = []
col8 = []
for i in range(0,len(var)):
line1 = var[i]
splitcol = line1.split(',')
col1.append(splitcol[0])
col2.append(splitcol[1])
col3.append(splitcol[2])
col4.append(splitcol[3])
col5.append(splitcol[4])
col6.append(splitcol[5])
col7.append(splitcol[6])
col8.append(splitcol[7])
df =pd.DataFrame({'日期':np.array(col1),'代码':np.array(col2), '名称':np.array(col3),'最新价':np.array(col4),'涨跌幅':np.array(col5),'涨跌额':np.array(col6),'成交量':np.array(col7),'成交额':np.array(col8)})
print(df)
随便写了个,真正运用时不要写这么累赘的。
dataframe生成后你用to_csv就可以导出了
@云双流: 这个我之前用过就是感觉特别麻烦,我现在用csv模块,直接做的
data = re.search(r'"trends":([\s\S]*?)$',req).group(1)[:-1] #抽取json中的trend
data = data.replace('[','').replace(']','').replace('"','')
data = data.split(',')
data = [data[i:i+8] for i in range(0,len(data),8)]
print(data)
f = open('e:\shuju\3.csv', 'w', encoding='gb18030', newline="")
writer = csv.writer(f)
writer.writerow(('日期', '最新价', '单位净值', '累计净值', '日增长额', '日增长率', '申购', '赎回'))
for i in data:
writer.writerow(i)
@迁羽: 也可以。你这也是依靠调整数据结构后写入csv文档。
不过老实说如果不是特地为了使用爬虫的话,可以选择使用python 的金融模块。
会更方便些。具体的你可以查下
@云双流: 好的感谢
@云双流: 这个模块好像不能下载整合过的数据吧,比如本周的股票成交概况(全部股票)
@迁羽:我也在研究中。好像是分深市和沪市的A股股票,部分基金的要专门接口
@云双流: 你看上交所的数据,分了很多类,这个模块我查了一下 ,功能有点单一,下载所有的数据,自己做量化分析还行
@迁羽: 如果你用的是finance 模块的话,那个主要针对国外的股票,特别是美股。
国内股票数据我用的是tushare,这个有网站也在github上有源码,数据是他们整合过的。
@云双流: 嗯 我还是直接上交所爬数据得了 好麻烦
看上去还算规整啊,用逗号分隔,知道第几个是什么数据,然后生成一个文本文件就行了
我是个小白,您这样说我也不知道怎么做啊,我也知道思路,但这不是json的数据么,loads报错,转list也报错
@迁羽: 就把它当成一个大字符串处理好了,先去掉两头的括号,再用逗号分隔为一个字符串数组,用Split函数分隔就行,很多编程语言都有这个函数的。
@会长: 谢谢你
还真有人回复