最近试图从财经网站上积累数据,选中了同花顺财经的数据中心的数据。
插一句话,个人认为同花顺可能是目前财经领域掌握着最先进的机器学习技巧与人工智能算法的网站了。我自己最近也在做金融领域的问答与对话系统,偶然发现了同花顺i问财https://www.iwencai.com/这个网站,这种智能化的金融问答以及其叙述性的策略回测系统全网恐怕只此一家,确实是让人感到很惊艳。
言归正传,掌握了如此技术的同花顺对付几个爬虫可不是收到擒来。我试图去爬取http://data.10jqka.com.cn/funds/ggzjl/上资金流动的数据,然而无论我用什么办法,我都只能获取到前五页的数据。下面我说明一下我的操作历程:
- 首先自然是常规的requests.Session()模块的方法,伪装User-Agent,先定位同花顺,再进入数据中心获取数据。结果甚至连访问都无法做到,后来我尝试复制了一段真实浏览器访问的Cookie加入到session.headers中终于可以实现数据获取;
- 然而接下来就是无穷无尽了只能获取到前五页的数据的问题了。我尝试了爬取每页伪装一个不同IP(失败,仍然只能五页);两次访问之间设置一个60~120秒的间隔(稍有起效,但是仍然会被拒绝访问);最后我甚至猜想会不会是同花顺默认设置如果访问了前五页就不允许访问接下来的页面,于是我尝试用一个随机的顺序去访问这总共71页,结果如你所料——并没有什么P用,访问了五页后照样拒绝访问;
- 我最后总结下来原因应该是出在Cookie上,可是我又无法做到每次访问换一个新的Cookie,虽然继续增加访问之间的间隔时间是有效果的,但是都间隔2分钟访问一次我还不如自己手动复制页面算了;
- 这时候我忽然想到了selenium。以前我觉得selenium能做到的事情,我普通爬虫照样能做到,而且selenium需要实际启动浏览器,刷新页面实在是很低效的做法,同样的爬虫我用requests库能爬100页而selenium可能只能爬到30页,因此我一度觉得selenium是一个很鸡肋的爬虫手段。但是现在不同了,requests.Session()模块在同花顺面前成了纸老虎,中看不中用了,于是我重启selenium来进行爬虫;
- 事实上在selenium只生成一个webdriver对象的情况下仍然会被同花顺限制在五页之类的访问次数,可是如果我每访问一次都重建一个新的webdriver对象则可以避免这种情况;
不多说,直接上代码↓↓↓
Tips:笔者是使用的Firefox浏览器,因此selenium是基于Firefox的,其他不同浏览器可以把代码中的Firefox改为Chrome之类的应该就可以了。另外请自行在该py文件所在的目录下新建一个用今日日期命名的文件夹(如2019-01-27)。
有话要说...