Node.js实现单页面爬虫
在imooc网上跟着老师写了两个爬虫,一个最简单的直接爬整个页面,一个完善版把章节标题和对应编号打出来了。
看完之后,自己也想写一个爬虫,用自己的博客做测试,虽然结果并没有很成功- -,还是把代码放上来。
目标是抓取章节的标题。
博客页面:
对应标签:
页面源代码:
经过分析,我们应该要抓取class=artHead的<div>,往下还有一个没有类的<div>,然后找到它的<h4>标签下子标签<a>的内容,就是章节的名字。
上代码:
//引入http模块varhttp=require('http');//确定要抓取的页面//debug:本来写了qmkkd.blog.51cto.com,一直出错,在前面加上http就好了。varurl='';//这里的url是'http://qmkkd.blog.51cto.com';,博客显示不出来,有毒//引入cherrio模块,类似服务器端的jqueryvarcheerio=require('cheerio');functionfilterChapters(html){//将html变成jquery对象var$=cheerio.load(html);varartHeads=$('.artHead');varblogData=[];artHeads.each(function(item){varartHead=$(this);//获取文章标题varartTitle=artHead.find('h4').children('a').text();blogData.push(artTitle);})returnblogData;}functionprintBlogInfo(blogData){blogData.forEach(function(item){varartTitle=item;console.log(item+'\n');})}http.get(url,function(res){varbuffers=[];varnread=0;res.on('data',function(data){buffers.push(data);nread+=data.length;});//网上找到的处理中文乱码问题的方法,但好像没有解决T_T//之后还采用了bufferhelper类,好像也不对=-=//应该是基础不好的问题,暂时debug不了,先放着res.on('end',function(){varbuffer=null;switch(buffers.length){case0:buffer=newBuffer(0);break;case1:buffer=buffers[0];break;default:buffer=newBuffer(nread);for(vari=0,pos=0,l=buffers.length;i<l;i++){varchunk=buffers[i];chunk.copy(buffer,pos);pos+=chunk.length;}break;}varhtml=buffer.toString();varblogData=filterChapters(html);printBlogInfo(blogData);})}).on('error',function(){//执行http请求失败时,返回错误信息console.log('获取博客数据出错');})
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。