使用NodeJs,实现数据抓取
2015-03-11 10:26
155 查看
学习笔记
2、[选装] 安装iisnode,以及rewrite,因为我是以IIS作为Server,所以用到了这2个IIS的拓展插件,假如仅仅只是cmd控制台运行node则这第二项忽略
3、附加信息:当安装成功之后,在IIS下回出现URL重写这么个东东
View Code
cheerio的使用:
2、另外一个就是iconv-lite,它的作用就是解决编码问题,可以认为是一种标准字符集转换接口,用于在不同字符集编码之间进行转换,注意:nodejs自带的toString()方法是不能解决中文编码问题的。
官方资料:iconv-lite支持的编码包括node.js原生编码:utf8, ucs2, ascii, binary, base64;同时支持广泛使用的单字节编码:Windows 125x family, ISO-8859 family, IBM/DOS codepages, Macintosh family, KOI8 family, latin1, us-ascii;多字节编码:gbk, gb2313, Big5, cp950。
iconv-lite的使用:
3、在做字符处理,特别是GB2312,GBK格式,例如GBK格式英文占用1个字节,汉字占2个字节,当执行ondata时,匿名函数的参数chunk其实是一个Buffer对象,如下代码:
当你换成用result+=chunk时,其实隐式的将chunk做了toStrinig()处理,于是到了最后,不管你用下面哪种方式都会报错
2.iconv.decode(result , 'gb2312');
原因:你对Buffer对象做了加法操作,字符截断,导致解码出错。
bufferhelper的使用:
结束,睡觉
------如果你觉得此文对你有所帮助,别忘了点击下右下角的推荐咯,谢谢!------
前言
近期做一个数据抓爬工具,最开始使用的是C#控制台应用,同时正则表达式去过滤数据,看着还行,可每次运行都依附于.net framework很是不爽,于是想整点其他的方法。本人还是比较喜欢javascript的,思来想去决定用服务器端的javascript来试试!环境、工具准备
1、[必装] 安装nodejs,下载最新nodejs,点击此处2、[选装] 安装iisnode,以及rewrite,因为我是以IIS作为Server,所以用到了这2个IIS的拓展插件,假如仅仅只是cmd控制台运行node则这第二项忽略
3、附加信息:当安装成功之后,在IIS下回出现URL重写这么个东东
cb({"title":"如果他喜欢你,就不会暧昧不清;如果他不再联系你,别为他找理由","date":"2011-05-12","auth":"午夜未殇","content":" 1、如果他被动矜持。\r\n \r\n “也许他不想破坏我们的友谊”\r\n \r\n “也许他害羞”“也许他自卑”\r\n \r\n “也许他只是不知道怎么联络我”……\r\n \r\n Gerg说,在整个人类历史进程中,\r\n \r\n 任何一个男的都会为了接近你而不在乎断送“友情”,\r\n \r\n 他也不可能因为害羞和自卑而害怕得不敢追你,\r\n \r\n 他唯一“害怕”的只是他对你是那么的“无动于衷”,\r\n \r\n 他不会不知道怎么联络你,手机,email,IM,SNS,twitter……\r\n \r\n 他可以动用他的眼睛、嘴巴、大脑、关系网、google找到你——除非他不想找到你。\r\n \r\n 也许有人提倡这已经不是石器时代了,\r\n \r\n 女孩子去主动追求看上的人吧,\r\n \r\n 但是相信真正喜欢你的人一定不会让你费尽周折去找他——因为他会主动送上门来。\r\n \r\n 2、如果他答应你的事却没有做到,哪怕那只是一个电话。\r\n \r\n “他真的很忙所以忘了”“至少他真的与我道歉了”……他很忙,\r\n \r\n 即将就任美国总统,一个小时好几亿的生意要谈,忙得快疯了,\r\n \r\n 一天根本抽不出时间与你打电话,忙得真疯呀。\r\n \r\n 有手机、有快速拨号、甚至有语音拨号,\r\n \r\n 有时压根没想打电话,电话就从裤兜里拨出去了,\r\n \r\n 为什么没有时间打电话。\r\n \r\n 如果真的喜欢你就不会忘记,如果忘记说明他不在乎你失望。\r\n \r\n “忙”就是恋爱上的大规模杀伤性武器,是“混蛋”的同义词,\r\n \r\n 混蛋就是用忙敷衍你的那个人。\r\n \r\n ——(心智健全的)男人知道什么叫“轻重缓急”,至于道歉?\r\n \r\n 噢,没有时间听他胡说八道。\r\n \r\n 3、如果他暧昧不清。\r\n \r\n “他以前受过伤”“他现在生活很混乱”\r\n \r\n “他刚刚分手/离婚,他想慢慢来”“他习惯了自由”……\r\n \r\n 这些全是都市神话,用来对付男人不喜欢的女孩,\r\n \r\n 如果他喜欢你,就不会暧昧不清,就会昭告天下对你的所有权,\r\n \r\n 他不愿意见你的朋友和家人,\r\n \r\n 说因为是和你在一起而不是要和***谈恋爱,\r\n \r\n 他不愿意带你走进他的圈子,说因为这只是两个人的事,\r\n \r\n 如果他用以上种种借口解释你们之间的暧昧,\r\n \r\n 那么请自动翻译成“我只想用你来消磨时间”“我不太喜欢你”。\r\n \r\n 4、如果他不愿意与你太亲近。\r\n \r\n Gerg说得无比直接,\r\n \r\n “我是男人,如果我喜欢你,我就吻你,会想看你穿内衣和不穿内衣的样子。”,\r\n \r\n 虽然觉得很囧很寒,但是想想也是实话吧,\r\n \r\n 如果喜欢你就应该是喜欢你的内在和外在,\r\n \r\n 难道你要一个喜欢你的人与你说“我很爱你,让我成为你的心灵之友吧”……\r\n \r\n 我估计柏拉图他老人家也不会这么说。\r\n \r\n 5、如果他背叛你。\r\n \r\n “他喝多了”“那只是偶尔出现的意外”“他是不小心的”……\r\n \r\n Gerg说得很对,背叛没有借口。\r\n \r\n 背叛这种事情是不会“不小心就发生”的,\r\n \r\n 他不可能说“噢,我不小心摔了一跤,正好摔到别人床上去了。”\r\n \r\n 明知会破坏恋爱中的规矩还要去实施,\r\n \r\n 你应该直接把他甩掉,最糟糕的是有人可能因此怀疑自己的魅力,\r\n \r\n 是不是应该整容是不是应该减肥,\r\n \r\n Gerg说得很酷:“你需要减掉的不是20磅,\r\n \r\n 而是175磅——你那没出息的男朋友的体重。”\r\n \r\n 6、如果他都喝得醉醺醺才来找你。\r\n \r\n 他酗酒、或者吸毒(这个在国内应该不普遍),\r\n \r\n 而不愿意为你改变,那么就该离开,因为长远的生活是需要清醒的。\r\n \r\n 7、如果时机成熟但他依然不想结婚。\r\n \r\n “也许是我思想太不开放”“他受到童年家庭阴影”“他还没准备好”……\r\n \r\n 许多男人、女人、心理学家、社会学家、人类学家、女权主义者...\r\n \r\n 都可以滔滔不绝的进行一场批判婚姻制度的讲座,\r\n \r\n 告诉你婚姻是落后的制度是古老的财务契约,\r\n \r\n 可是很抱歉,首先你要搞清楚“不想结婚”可能仅仅意味着“不想和你结婚”,\r\n \r\n 那些说“不想结婚”人最后一定会结婚,只是不是和你。\r\n \r\n 8、如果他不断的与你分手,然后又来找你和好。\r\n \r\n 首先请保持风度,不要再打电话传简讯给他,如果分手,那就是分手。\r\n \r\n 你不要觉得只要他回来找你,你就可以继续跟他聊天、见面、看电影,\r\n \r\n 为他做饭、买礼物、刻CD、喂鱼,问候他的父母和朋友,\r\n \r\n 偷用他的语音信箱查询他的通话记录。。。。。\r\n \r\n 真正喜欢你的人不会要和你分手,不会翻来覆去的折腾你,\r\n \r\n 所以麻烦你清醒点,除非你想成为悠悠球冠军小姐。\r\n \r\n 9、如果他突然莫名其妙的消失了。\r\n \r\n 不要花费巨大的精力来解决“失踪男人之谜”,\r\n \r\n 无论你找出了各种各样可以安慰自己的证据和借口,\r\n \r\n 唯一的事实是,他不再想和你在一起,\r\n \r\n 并且没有胆量和你说清楚。\r\n \r\n 请相信,没有什么秘密——他配不上你。\r\n \r\n 10、如果他是已婚。\r\n \r\n 没什么好说的,至少在他离婚之前。\r\n \r\n 如果你还想不通,那么大概应该报警——有人把大脑丢了。\r\n \r\n 有时我们宁愿相信一个男人太害怕、太紧张、太自卑、太圣洁、\r\n \r\n 太爱前女友、太敏感、太恋母、太忙、童年阴影太多、\r\n \r\n 家庭压力太大、太累、太疯、晒得太黑、太有自杀倾向……\r\n \r\n 却不愿意看清很简单的事实,\r\n \r\n 是的,他不是太忙,不是受过伤,\r\n \r\n 不是有童年阴影,不是遇到了地震洪水,\r\n \r\n 不是要就任美国总统,不是脑震荡得了短暂性失忆,\r\n \r\n 不是手机掉进了火锅,他不是有健忘症,\r\n \r\n 他也不是死了——他只是没有那么喜欢你而已。\r\n \r\n "})
View Code
总结
1、通过使用nodejs实现抓数据,发现就是不一样,就像原始的用javascript操作DOM一样方便,这得益于模块cheerio,它是nodejs特别为服务器定制,快速灵活实施的Jquery核心实现。cheerio工作于DOM模型上,且解析、操作、呈送都很高效,据基准测试:cheerio大约比JsDom快8倍。cheerio的使用:
//方式一 var cheerio = require("cheerio"); var $ = cheerio.load(doc); $("p").attr("id","test"); //方式二 var $= require("cheerio"); $("p").attr("id","test");
2、另外一个就是iconv-lite,它的作用就是解决编码问题,可以认为是一种标准字符集转换接口,用于在不同字符集编码之间进行转换,注意:nodejs自带的toString()方法是不能解决中文编码问题的。
官方资料:iconv-lite支持的编码包括node.js原生编码:utf8, ucs2, ascii, binary, base64;同时支持广泛使用的单字节编码:Windows 125x family, ISO-8859 family, IBM/DOS codepages, Macintosh family, KOI8 family, latin1, us-ascii;多字节编码:gbk, gb2313, Big5, cp950。
iconv-lite的使用:
var iconv = require('iconv-lite'); //将nodejs的原生编码转换成其他编码 var val = iconv.decode(bufferHelper.toBuffer(), 'gb2312');
3、在做字符处理,特别是GB2312,GBK格式,例如GBK格式英文占用1个字节,汉字占2个字节,当执行ondata时,匿名函数的参数chunk其实是一个Buffer对象,如下代码:
res.on('data', function (chunk) { bufferHelper.concat(chunk); });
当你换成用result+=chunk时,其实隐式的将chunk做了toStrinig()处理,于是到了最后,不管你用下面哪种方式都会报错
1.var iconv = new Iconv('GBK', 'UTF-8'); iconv.convert(result).toString();
2.iconv.decode(result , 'gb2312');
原因:你对Buffer对象做了加法操作,字符截断,导致解码出错。
bufferhelper的使用:
var BufferHelper = require('bufferhelper'); var bufferHelper = new BufferHelper(); bufferHelper.concat(chunk);
结束,睡觉
------如果你觉得此文对你有所帮助,别忘了点击下右下角的推荐咯,谢谢!------
相关文章推荐
- 使用NodeJs,实现数据抓取
- 使用System.Text.RegularExpression中的API实现网页数据的抓取
- nodejs--实现跨域抓取数据
- 使用Chrome快速实现数据的抓取(三)——JQuery
- Nodejs实现爬虫抓取数据实例解析
- 使用Maven构建项目环境,利用Jsoup实现数据抓取(上)
- 使用Chrome快速实现数据的抓取(四)——优点
- 使用HtmlAgilityPack XPath 表达式抓取博客园数据的实现代码
- 使用Maven构建项目环境,利用Jsoup实现数据抓取(下)
- 使用Chrome快速实现数据的抓取(二)——协议 - 天方 - 博客园
- 使用nodejs实现对浏览器上传excel并解析数据的实现
- nodejs--实现跨域抓取数据
- [原创.数据可视化系列之十二]使用 nodejs通过async await建立同步数据抓取
- 使用nodejs,express,mysql,Bootstrap开发采购招标网站(三)Bootstrap-table实现Ajax删除数据
- 使用Chrome快速实现数据的抓取(二)——协议
- Asp使用XMLHTTP方式上实现数据抓取!
- 使用nodejs,express,mysql,Bootstrap开发采购招标网站(四)Bootstrap-table实现Ajax新增修改数据
- nodejs--实现跨域抓取数据
- 使用HttpClient实现数据抓取
- C#使用Selenium实现QQ空间数据抓取 登录QQ空间