首页 > 编程知识 正文

如何爬取股票数据,python爬取股票历史数据

时间:2023-05-04 22:18:20 阅读:55730 作者:2126

请不要来。 哥哥来帮忙,我想有用。

直接进入实测结果图。

以下是代码。 请作为参考。

#-* -编码: utf-8-* -

' ' createdonsatfeb 10183360443360252018 @ author : sheng ' '

#导入两个模块

import tushare as ts

导入pandas as PD

#首先使用ts.get_stock_basics )命令获取股票代码的基本数据,然后使用to_excel ) )命令保存。

#以下为本人保存的路径

source _ date=r ' d :\ users\ sheng\ desktop\ finance transcriptstock list.xlsx '

#我们需要提取股票代码,用于以后的for循环。 首先,读取以前下载的文件,将第一列的股票代码进行字符串转换。

df=PD.read_excel(source_date,converters={ ' code ' : lambdax : str (x ) }}

#将提取出的股票代码列表化,分配代入和stockcode这一变量。

sockcode=list(map(str,df['code'] ) )

#开始循环下载。

for i in stockcode:

开始下载print ()股票数据………(格式(I ) ) ) ) ) )。

#设定各文件的文件名和保存位置。

file _ address=r ' d :\ users\ sheng\ desktop\ finance transcriptbig data{ }.xlsx '.xlsx

#提取各个股票的历史数据。

sock_data=ts.get_hist_data (

#导出到以前设定的好的文件地址。

stock _ data.to _ excel (file _ address )

#已将股票代码添加到excel中,因为每个导出股票的历史数据不包含股票代码

#在日期的下一列中添加股票代码,以便以后在所有数据合并后进行股票筛选。

#如果不需要,请删除以下三行代码。

dw _ data=PD.read _ excel (file _ address )

dw_data.insert(loc=1,column='code ',value=i ) )。

dw _ data.to _ excel (文件_地址)

#打印下载过程,便于观察。

print({}/{}hasbeendownloaded,{}股票数据下载完成)。

. format(stockcode.index(I ) 1,len (stock code ),I ) )

print----------------------------------请参阅。

一共3500股。 慢慢下车吧。 睡了! 晚安亲爱的

------------- -请参阅

更新代码以利用多线程,将下载速度提高了n倍。 一个多小时的生活现在只有五分钟。 简单粗暴。 以下是代码。 更改文件的保存地址的话马上就可以使用。

导入pandas as PD

import tushare as ts

导入操作系统

来自数据导入数据时间

来自日期导入时间delta

frommultiprocessing.dummyimportpoolasthreadpool

导入时间

class stock_data:

def __init__(self ) :

self.file _ path _ basic=r ' d :pycharmprojectstradefinal _ project _ a _ stock _ data _ bata

self.file _ dir _ daily=r ' d :pycharmprojectstrade _ final _ project _ a _ stock _ stock _ data _ Dai

self.current _ date _ key _ path=datetime.today ().strftime('%d_%m_%y ' ) )

self.latest _ basic _ key _ path='/basics _ data/stock _ basics _ { } '.format (self.current _ date _ key

self.whole _ files _ list _ daily=OS.list dir (self.file _ dir _ daily )。

self.start_date='2014-01-01' #选择开始时间

更新defupdate_stock_basic(self ) : #股票基本面数据

hdf=PD.hdf store (self.file _ path _ basic ) )。

if self.latest _ basic _ key _ pathinhdf.keys () :

print ()基本面资料已更新为() ).format (self.current _ date _ key _ path ) )。)。

else:

开始将print ()股票基本面更新为() ).format (self.current _ date _ key _ path ) ) )

df=ts.get_stock_basics (

hdf.put (self.latest _ basic _ key _ path,df,format='t ',data_columns=True,append=False ) ) )

print (股票基本面更新完成。 () ).format ) self.current_date_key_path ) )

latest _ stock _ basics=hdf.get (hdf.keys (([-1 ] ) ) ) ) )

hdf.close ()

return latest_stock_basics

defupdate_daily_data(self,code ) :

try:

df=ts.get _ k _ data (代码,self.start_date,ktype='d ',autype='qfq ' )

df.set_index('date ',inplace=True )。

df.to _ CSV (self.file _ dir _ daily '' { }.CSV '.format (code ),mode='wt ' ) ) ) ) )。

处理=round ((stock _ code.index ) code )/len (stock _ code ) ) * 100,2 ) ) ) ) ) ) )。

print (() % ).format () process () )

except:

print (“没有数据”

st=stock_data (

sock _ basics=ST.update _ stock _ basic (

stock _ basics=stock _ basics [~stock _ basics [ ' name ' ].str.contains ] #消除ST股

stock _ code=list (映射(str,stock_basics.index ) )

def daily_update () :

start1=time.time (

池=热池(400 ) )。

try:

pool.map(ST.update_daily_data,stock_code )。

except:

pool.map(ST.update_daily_data,stock_code )。

pool.close (

pool.join () )

end1=time.time (

diff2=end1 - start1

打印(diff2)计算需要时间

if __name__=='__main__':

daily_update ()

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。