这个项目是一个基于 Python scrapy 的爬虫项目,截至到目前(2015年05月24日),初衷是希望能够爬取 www.xueqiu.com 中的某个给定的股票的页面下 -- 比如‘融创中国’的 -- 所有的来自用户的讨论(至于后续的功能再说,肯定是希望用更多的数据然后基于文本挖掘和情感分析来预测股价)。
以下是目前的调研结论:
以‘融创中国’这只股票为例,股票代号是01918,所以它的页面是 http://xueqiu.com/s/01918 ,这个页面中展示了来自用户的所有关于‘融创中国’这只股票的讨论。
但是这些来自用户的讨论并不直接包含在该url的html页面中,而是该页面中的javascript代码以Ajax的方式 -- 即异步的http get请求 -- 获取来的,此请求的URL是 http://xueqiu.com/statuses/search.json ,此外在url中还有几个query string,用来指定相关的股票代码、想要多少条讨论、以及想要的是第几页的讨论等等。
如果直接通过传统的get请求该search.json且附加相同的query string,也能够获取到json数据 -- 包含了所需要的来自用户的讨论 -- 但前提是:get请求中要有登陆雪球之后雪球返回的cookie信息,否则雪球会拒绝该请求。
因此这个scrapy爬虫,第一阶段打算这样实现:
先人工的登陆 xueqiu.com , 且通过浏览器的开发者工具的‘网络’工具监控到登陆成功后雪球站点发回来的cookie数据。
爬虫的start url设置为 http://xueqiu.com/statuses/search.json另加上query string,并且设法告诉scrapy所需要的cookie,以此构造初始的请求,
在得到的response中能够解析到这只股票的来自用户的讨论的第一页的数据。
这里附加更多调研过程中的细节
1,在发现xueqiu.com/s/01918的html中并没有直接包含了用户的讨论数据以后,通过看javascript代码,发现了雪球的前端使用了backbone库,其来自用户的讨论的数据是在SNB.Collections.Statuses -- 可能有个别字符记错了,不核对了 -- 其前端在构造该collection实例的时候将来自用户的讨论作为参数传给构造函数,每一条讨论是一个javascript object对象,一般是15条讨论也就是一个包含了15个object的javascript array。而这个array的数据就是通过Ajax调用请求前文提到的search.json得到的。
2,通过浏览器的开发者工具中的‘网络’工具,监控所有的http请求,的确能够找到对应的发给search.json的请求,且其响应正是所有的讨论数据。