对量化投资策略进行研究,第一步就是获取我们需要的数据。使用历史数据能够对策略进行回测,以验证策略的有效性和可信性。另一方面,量化投资本身也是一种对数据的研究,因此它也必须遵循数据分析的相关步骤。作为一个业余的量化投资爱好者,免费的数据来源主要有以下几种途径:
- Yahoo、Sina 财经的API
- Python的Tushare包
- 自己手工爬取
Tushare是一个免费、开源的Python财经数据接口包,它对数据进行了规整因此使用起来非常方便。尽管有如此优秀的数据包简化了数据的采集工作,我们依然需要掌握从网站上爬取数据的技能,以获取接口没有提供的数据。本篇文章将会介绍一个小爬虫,告诉大家如何从网站上获取所有股票的代码和名称。
Python的urllib2库是爬虫的基础,使用urllib2库可以获取网页的内容,再使用正则表达式对所需的内容进行提取。我们在东方财富网的stocklist页面下对股票的代码和名字进行爬取,若要获取该网页下的全部内容,则需要以下几步:
- 对服务器发送一个请求,使用urllib2的Request方法返回reguest对象
- 采用urlopen方法处理构建的request对象,返回服务器的应答(response对象)
- 对response对象使用read方法,返回网页的内容
request
一些网站不允许程序直接采用上面的方式进行访问,因此需要通过程序模拟浏览器的行为。通常采用的技术是在Requset方法的headers参数中设置agent,这样服务器认为是浏览器发出的请求就可以正常respose。
url
在进行网页内容的读取过程中,会遇到这样或那样的原因导致异常使得读取不成功,可以使用try-except捕获相应的异常。
try
以上就是获取网页Html的过程,下面就需要在这茫茫Html中获取我们需要的东西。这个时候需要用到正则表达式对需要的内容进行匹配。
上图中蓝色标出的部分是我们需要的股票名称和代码,采取以下正则表达式可以获取需要的内容。正则表达式的写法不是唯一的,但需要保证使用该正则不会出现遗漏或多匹配出不需要的其他信息的情况。如果你对正则表达式不太熟悉也没有关系,Python提供了Beautiful Soup工具能够更为简单地提起Html或者Xml中的内容。
pattern
采用findall方法返回的是一个List,我们可以将爬取的结果放在一个名为stocklist的txt文件中。
reload
当然,更好的结果储存方式是将结果放在数据库中,下面就是以sqllite数据库为例进行了一个爬取结果的储存。将爬取结果放在数据库中能够方便调用,并且可以设置shell任务做定时的爬取和更新。
conn
以下是完整的代码,供大家参考。
#coding:utf-8
好了,如何从网站上爬取我们需要的数据就介绍到这里。Python有着更为强大的爬虫框架Scrapy,有兴趣的同学可以学习一下。关于本次小爬虫的全部代码,可以关注我的微信公众号,以后会有更多关于量化的原创文章哦!。
我的微信公众号:会掘金的小鹿(NuggetsRoad)