通过爬取雅虎财经上的股票数据,并绘制出股价的K-折线图,实现了买入\卖出股票时机的分析。在这个过程中发现了几个以前新问题,记录如下:
1、python中日期与时间处理模块(date和datatime)
time模块主要用于时间访问和转换,这个模块提供了各种与时间相关的函数。time的时间戳格式,字符串格式之间的转换如下图所示:需要通过struct_time做中转站,不能直接一步到位。
2、爬取数据的保存
(1)、通过request.get(url)得到的数据是requests.models.Response类型,我们要查看的话必须把它转化为.text格式才能查看,把该数据保存到.csv中操作如下:
r=requests.get(url) f = open(name+'.csv', 'w')#创建存放股票数据的csv文件 f.write(r.text)#将获得的股票数据以文本数据的形式写入csv文件中 f.close()
#将.csv文件读取成dataFrame格式,并修改索引 data = pd.read_csv(name+'.csv', index_col=0,parse_dates=True, sep=",", dayfirst=True) #修改索引和列的名称,以适应本文的分析 data.index.rename('date', inplace=True) data.rename(columns={'Open':'open', 'High':'high', 'Low':'low', 'Close':'close','Volume':'volume'}, inplace=True)
(2)、如果返回的数据是dataFrame类型,则可以直接使用dataFrame.to_csv('xx.csv')存储为,csv文件。或者使用dataFrame.to_sql('xxx.sql')保存到sql数据库中:
s = pdr.get_data_yahoo(name, begin, end)#得到的数据直接为dataFrame格式 s.to_csv(name+'.csv') data = pd.read_csv(name+'.csv', index_col=0,parse_dates=True, sep=",", dayfirst=True) #修改索引和列的名称,以适应本文的分析 data.index.rename('date', inplace=True) data.rename(columns={'Open':'open', 'High':'high', 'Low':'low', 'Close':'close','Volume':'volume'}, inplace=True)
(3)爬虫如何对抗网站的反爬虫机制:通过user-agent模拟用户登入网站。
def get_one_page(url): req=urllib.request.Request(url) #模拟浏览器post请求信息 req.add_header('User-Agent','Mozilla/5.0(Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36') try: response=urllib.request.urlopen(req) response=response.read().decode('utf-8') return response except RequestException: return None