首页 新闻 会员 周边 捐助

在东方财富网上爬取的json数据,提取其中的trend的值如下,需要保存到csv中,如何操作

0
悬赏园豆:100 [已解决问题] 解决于 2019-09-24 13:41

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

欲乘风上云霄的主页 欲乘风上云霄 | 初学一级 | 园豆:112
提问于:2019-09-24 09:28
< >
分享
最佳答案
0

我做的话可能会做个循环将数据写入dataframe中,再转为csv文件
但如果你只是要股票数据的话你可以尝试用tushare.tushare获取的数据本身就是dataframe,可以很轻易的转为csv文件

收获园豆:80
云双流 | 菜鸟二级 |园豆:255 | 2019-09-24 09:49

我试过dataframe,这种形式的数据没有键,会报错的,然后我又想转成列表,按照index取值后按逗号分隔插入到表里,结果转列表都报错 头都炸了

欲乘风上云霄 | 园豆:112 (初学一级) | 2019-09-24 10:26

@迁羽:
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)

随便写了个,真正运用时不要写这么累赘的。

云双流 | 园豆:255 (菜鸟二级) | 2019-09-24 11:06

dataframe生成后你用to_csv就可以导出了

云双流 | 园豆:255 (菜鸟二级) | 2019-09-24 11:08

@云双流: 这个我之前用过就是感觉特别麻烦,我现在用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)

欲乘风上云霄 | 园豆:112 (初学一级) | 2019-09-24 12:00

@迁羽: 也可以。你这也是依靠调整数据结构后写入csv文档。
不过老实说如果不是特地为了使用爬虫的话,可以选择使用python 的金融模块。
会更方便些。具体的你可以查下

云双流 | 园豆:255 (菜鸟二级) | 2019-09-24 13:36

@云双流: 好的感谢

欲乘风上云霄 | 园豆:112 (初学一级) | 2019-09-24 13:40

@云双流: 这个模块好像不能下载整合过的数据吧,比如本周的股票成交概况(全部股票)

欲乘风上云霄 | 园豆:112 (初学一级) | 2019-09-24 16:29

@迁羽:我也在研究中。好像是分深市和沪市的A股股票,部分基金的要专门接口

云双流 | 园豆:255 (菜鸟二级) | 2019-09-24 16:43

@云双流: 你看上交所的数据,分了很多类,这个模块我查了一下 ,功能有点单一,下载所有的数据,自己做量化分析还行

欲乘风上云霄 | 园豆:112 (初学一级) | 2019-09-24 16:44

@迁羽: 如果你用的是finance 模块的话,那个主要针对国外的股票,特别是美股。
国内股票数据我用的是tushare,这个有网站也在github上有源码,数据是他们整合过的。

云双流 | 园豆:255 (菜鸟二级) | 2019-09-24 16:46

@云双流: 嗯 我还是直接上交所爬数据得了 好麻烦

欲乘风上云霄 | 园豆:112 (初学一级) | 2019-09-24 16:50
其他回答(2)
0

看上去还算规整啊,用逗号分隔,知道第几个是什么数据,然后生成一个文本文件就行了

收获园豆:20
会长 | 园豆:12463 (专家六级) | 2019-09-24 10:50

我是个小白,您这样说我也不知道怎么做啊,我也知道思路,但这不是json的数据么,loads报错,转list也报错

支持(0) 反对(0) 欲乘风上云霄 | 园豆:112 (初学一级) | 2019-09-24 10:59

@迁羽: 就把它当成一个大字符串处理好了,先去掉两头的括号,再用逗号分隔为一个字符串数组,用Split函数分隔就行,很多编程语言都有这个函数的。

支持(0) 反对(0) 会长 | 园豆:12463 (专家六级) | 2019-09-24 11:04

@会长: 谢谢你

支持(0) 反对(0) 欲乘风上云霄 | 园豆:112 (初学一级) | 2019-09-24 13:40
0

还真有人回复

你所拨打的号码是空号 | 园豆:211 (菜鸟二级) | 2019-09-25 14:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册