菜鸟初识LocoySpider
本帖最后由 yekong9527 于 2014-10-19 08:04 编辑1. 引
之前在网上看过瑞典的执业医师汉斯·罗斯林(Hans Rosling)2003年在TED上的演讲《Global trends in health and economics come to vivid life》,那时确实是一种数据演绎的新视角,他们建立了专门的网站GAPMINDER,开发了数据可视化的工具。我非常赞同的的他在演讲中说的两句话:
①无知不是问题,成见才是问题;
②……数据资料的特殊性使得世界上某些数据不可能像一般数据一样被搜索到,……不能把数据提供给世界上的学生和企业家。……最关键的就是让资料成为可搜索的。
第一句话说的是个人主观臆断的问题,这让我想起了前段时间热播的电视剧《历史转折中的邓小平》中讲到的“实事求是”问题,如果深究这个问题也许会追溯到哲学问题上吧。因为与论坛主题不符,在此不作过多的论述;第二句话讲的是数据资源开放的问题,这算是和论坛的主题有一定的关系。我想说说自己的看法:“摆事实,讲道理”,这是我们通常的论述手段,在这个“大数据(Big Data)”大兴的时间节点上,大家纷纷关注数据挖掘、数据处理、数据分析,数据可视化。大家所做的努力就是希望让我们的数据更鲜活地表现自然/实际中的事实。当然,我们拥有什么样的数据、不管对数据做了怎样的处理,最终能否反应,或者说在多大程度上反应我们所研究问题的事实,这一方面取决于我们对事实挖掘的设计思路,另一方面则取决于我们获取数据的全面性和准确定。对于数据的获取,我想这是我们论坛的一个主题(当然,菜鸟愚见,论坛的主题也许还包括数据的处理与发布等)。然而,正如Hans Rosling所说,绝大多数数据使我们不可能获取到的,这不仅是用户信息隐私的问题,也是关乎企业、机构、甚至是国家利益的问题。对于某些数据,确实应该是某些机构所独有的,这可能涉及到产权的问题,因为在这方面是个“小白”,也不扯那么远了。但是,现在有人提出了“网众”这么一个概念,强调了和创痛媒体传播不同的信息流通理念,用户的角色从被动的接受转换到了主动参与和创造的角色。按这样的理解,网络资源实质上是属于广大网民的,但是,我们发现这种数据依然是我们不可接近的深层数据,他们被埋藏在虚拟的互联网世界里。值得庆幸的是越来越多的机构开始对外开放API,也有越来越多像LocoySpider这样的工具提供给大家使用,但是面对浩如烟海的数据世界,我们还有很长的路需要走。
以上算是个人的一点抱怨和期许,和本来发帖想说的内容有点不着边了,现在回到正题吧。几天前,因为朋友需要抓取新浪微博上某一话题的数据作分析,让我帮忙做。经过一番*度,终于邂逅了LocoySpider(其实之前就听一哥们说过火车头采集器了,不过没有真正的见过面)。由于只涉及到了数据的简单采集,至于数据的在线发布等模块就没有关注啦(也很想学习一下,科室无奈时间太紧,以后有空再看吧)。好啦,其他废话不多说了,下面总结一下这几天学习使用LocoySpider内容吧。
2. LocoySpider采集大致流程
首先,明确自己需要什么数据(数据的来源网站、数据的内容、数据的格式),然后就是准备并安装配置我们需要的工具,当然就是LocoySpider啦,可以到乐维的主页去下载哦;
其次,对于简单的采集任务只要安装LocoySpider就好了,无需其他的工具和设置什么的。然后就是新建自己的任务,并且编辑任务;
最后,经过反复编辑测试好自己的任务后就可以真是开始任务采集和发布数据了。
我觉得大致的步骤就是这样吧,这样就算完了吗?当然不会,最关键的、最想要总结的应该就是对任务的反复编辑和测试的环节。
3. 新浪微博话题采集任务编辑
对于一个数据采集任务可能会有很大的数据量,但是咱编辑测试任务的时候就只需要选择那些具有代表性的少量的数据源,这样做的目的主要是为了减少时空的消耗。由于我需要抓取新浪微博上某个话题的微博的相关信息(主要是每条微博发帖人的ID,昵称,发帖内容,被点赞、转发、收藏、评论的次数。如果有时间再把每个用户的关注数、粉丝数、微博数也一并抓取到)。
开始编辑任务啦!
第一步、采集任务网址。再说网址之前,先说一下Cookie的问题。由于某些网站获取信息需要用户使用注册账号登录,或者说“游客”和注册用户所能看到的信息是不同的。对于新浪微博就是这样的,所以自己注册了个账号,在浏览器中登录后逛了逛要抓取的页面,然后就是在LocoySpider中获取Cookie啦。常常会出现这样的情况,之前测试过了网页过一段时间在测试,测试的结果完全不是我们想要的,这种情况一般是Cookie除了问题,重新获取Cookie,或者清空浏览器的缓存记录,重新登录账号,获取Cookie。据老鸟说,这是因为Cookie有效时间的问题(预知详情如何,敬请查看其他资源)。
回到网址了问题上,LocoySpider提供了一个起始网址加上一个多级网址获取的方式来获取我们需要抓取的网址列表。多级网址可以获取起始网址列表中没页面中所包含的网页URL,还有更详细的请求方式等等的配置,由于本人不懂这方面的问题,我就不多说了,基本上采用默认的设置。
由于我要采集的是一个话题的微博信息(暂时不考虑微博用户的信息),只在一级网址中采集,不去要获取二级网址。但是采用单条网址的方式始终没有测试成功,在加上对于分页的代码页很难找到,我没有采用批量/多页的方法,而使用了较苯的方法——文本导入,把自己要采集的网址保存在一个.txt文件里导入就OK了。(其实每个网址也只是最后的的数字不一样而已,和分页的页数相对应)
第二步、采集内容规则。主要就是采集内容标签的定义,虽然我们可以通过在浏览器中右键看到网页的编码和源代码,但是对于网页的源代码,建议使用LocoySpider提供的测试中的查看源代码方式,因为当我在浏览器中右键查看网页源代码时,我惊呆了!全是字母,它们认识我,我却懒得认识它们呀,全部是script脚本,完全不知道自己要抓取的内容在哪一块。
采用前后截断的方式来获取各个标签中的内容,关键是找到和这些内容关联的,其特有的代码段(微博中转发的情况中单条微博中还包括了一条源微博,这时区分这两种微博信息就稍微有点棘手了),建议多使用LocoySpider提供的通配符(*),还有原码中的查找功能。
另外就是每页微博中默认的是显示20天相关的微博,这就涉及到标签循环的处理了,由于我需要获取每一条微博,所以,自然而然就选择了标签循环匹配,每一条标签循环匹配项添加为新纪录。
第三步、发布内容设置。我需要把采集到的微博信息保存到Access数据库中,当然就选择了方式三,导入到自定义数据库。接下来当然就是数据库发布配置啦,貌似现在LocoySpider只支持2000-2003版本的Access文件,关于Access数据库及数据库中表的字段设计和SQL语句,细说说起来比较麻烦,大家可以翻翻相关的资料。我想分享的是:数据库中表中个字段的数据类型的的选择,比如说我要抓取的微博内容,采用普通的数据类型是放不下的,这样在发布的时候就会提示字段长度的错误,还好Access中有备注这种数据类型,可以保存较多的文本信息。另外就是时间类型,在Access数据库中选择自己需要的时间格式,需要在SQL语句中时间字段两端加上#(为什么会这样?还不懂呀),比如,Insert Into table(Date,UserName) Values(#[标签:Date]#,'[标签:UserName]');可以填入测试采集到的内容到测试发布模块进行测试入库。
第四步、文件保存及部分高级设置。暂时还没用到,也搞不清里面的设置,再次就不胡说八道了。
最后别忘了把编辑好的任务保存下来哦,如果需要在不同的机子上采集数据,也可以把任务导出,在其他机子上导入哦。
4. 底
本来是想趁着昨晚和兄弟们聚餐酒后的酒兴大笔一挥写完这篇文章的,但是文字功底差呀、逻辑思路差呀、……各种差呀,今早接着码字,弄到现在才基本上搞定,很久没有码这么多字了。
最后,还是要感谢乐维提供的LocoySpider和这样一个供大家交流学习……的平台!当然在使用Locoyspider的时候也发现一些需要改进的设计,相信LocoySpider以后会更好,另外一方面就是,期望以后,公司可以发展出其他的核心业务,然后把LocoySpider作为一个开源的项目给大家使用(主要是在使用时好多功能像我们这种普通用户都是是用不了的)。
差不多了吧,菜鸟一枚而已,还望老鸟多多指教!
站在巨人的肩上才能看得更远,一步一个脚印才能走得更远。分享成长,交流进步,转载请注明出处!
本帖最后由 采集超市 于 2014-10-16 13:51 编辑
不错 写的不错
『采集超市』专注于火车头规则、插件、模块、接口等周边产品开发!为企业和个人提供全方位的采集发布方案!
联系QQ: http://www.3464.com/tools/qqonline/Images/QQOnline/6_online.gif
官方网站:www.locoymall.com
http://bbs.locoy.com/data/attachment/forum/201310/21/002539x2g25ntt59yx85xt.gif 采集超市 发表于 2014-10-14 16:32 static/image/common/back.gif
不错 写的不错
谢谢!ali14ls,看到你的ID,很好奇,不知论坛里是否有“加密狗”方面的文章,想学习!!
页:
[1]