使用Ruby语言爬取东方财富网上的深证A股数据。
require 'url'
require 'json'
require 'win32ole'
begin
abc = URL.new("http://78.push2.eastmoney.com/api/qt/clist/get?pn=1&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&fid=f3&fs=m:0+t:6,m:0+t:13,m:0+t:80&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152")
sum = abc.get.json['data']['total'].to_s
url = URL.new("http://78.push2.eastmoney.com/api/qt/clist/get?pn=1&pz=#{sum}&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&fid=f3&fs=m:0+t:6,m:0+t:13,m:0+t:80&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152")
t = "d:\\rbsrc\\shenzhenstockexchange" + Time.now.strftime('%Y%m%d%H%M%S') + ".xlsx"
data = url.get.json['data']['diff']
excel = WIN32OLE::new('Excel.Application')
workbook = excel.WorkBooks.Add
worksheet = workbook.WorkSheets(1)
worksheet.Select
worksheet.Range('a1:p1').Value = ['股票名称', '股票代码', '最新价','跌涨幅','跌涨额',
'成交量','成交额','振幅','换手率','市盈率','量比','最高','最低','今开','昨收','市净率']
i = 2
for item in data do
worksheet.Range("a#{i}:p#{i}").Value = [item['f14'],item['f12'],item['f2'],
item['f3'] == '-' ? item['f3'] : item['f3'].to_s + "%" ,item['f4'],item['f5'],
item['f6'],item['f7'] == '-' ? item['f7'] : item['f7'].to_s + "%" ,
item['f8'] == '-' ? item['f8'] : item['f8'].to_s + "%",item['f9'],item['f10'],
item['f15'],item['f16'],item['f17'],item['f18'],item['f23']]
i = i + 1
end
workbook.SaveAs("#{t}")
workbook.Close(1)
rescue Exception => e
puts e.message
puts e.backtrace.inspect
ensure
puts "Program end!"
end
由于深证A股的股票代码有0开头的数字串,写入数据后把股票代码那一栏的单元格式设置为自定义000000即可,输出结果如下图所示
深证A.png