首页 Nodejs正文

node简单爬虫的做法

景先 Nodejs 2015-07-21 752 0 node.js

不算新文章,很早之前,尝试过,只是整理下….,参考了一些资料,网站啥的,还是那句话,只是基础,勿喷!

直入正题。。。。。。

____________________________________________________________________________________


1. 可是使用http的get方法,来简单实现

var http=require('http');
var url='http://www.itstrive.com';
var httpObj=http.get(url,function(res){
    var str='';
    
    res.addListener('data',function(data){  //也可以用on来监听这个事件
        str+=data;
    });
    
    res.addListener('end',function(){
        console.log(str);    
    });
});

httpObj.on('error',function(){
    console.log('错误了');    
});

2. 抓取的数据输出的页面中,需要监听web端口,web服务器

var http=require('http');

var url='http://www.itstrive.com';

http.createServer(function(request,response){
    var httpObj=http.get(url,function(res){
        var str='';
        
        res.addListener('data',function(data){
            str+=data;
        });
        
        res.addListener('end',function(){
            response.write(str);
            response.end();
        });
    });
    
    httpObj.on('error',function(){
        console.log('错误了');    
    });
}).listen(8081);

3. 抓取的东西想修改点内容,需要用cheerio模块,当然,首先需要npm你懂的

var http=require('http');
var cheerio=require('cheerio');

var url='http://www.itstrive.com';

http.createServer(function(request,response){
    var httpObj=http.get(url,function(res){
        var str='';
        
        res.addListener('data',function(data){
            str+=data;
        });
        
        res.addListener('end',function(){
            
            $=cheerio.load(str);
            
            $('.site-title').text('so easy!');
            $('h2').addClass('jjjjjjj').text('wahaha......');            
            console.log($.html());
    
            response.write($.html());
            response.end();
        });
    });
    
    httpObj.on('error',function(){
        console.log('错误了');    
    });
}).listen(8081);

当然这里只是简单修改个logo标题啥的:具体cheerio的用法git上有
地址:https://github.com/cheeriojs/cheerio 内有详细的api

4. node默认支持的编码是utf-8,若抓取的页面的编码是gb2312,那就乱了,oh,No….,不过不着急,可以尝试用一下iconv-lite,同样需要npm

var http=require('http');
var iconv=require('iconv-lite');
var url='http://www.hlj3.com/';
var httpObj=http.get(url,function(res){
    res.setEncoding('binary');
    var str='';
    
    res.addListener('data',function(data){
        str+=data;
    });
    
    res.addListener('end',function(){
        var buf=new Buffer(str,'binary');
        var newStr=iconv.decode(buf,'GBK');
        console.log(newStr);    
    });
});

httpObj.on('error',function(){
    console.log('错误了');    
});

iconv-lite的git地址:https://github.com/ashtuchkin/iconv-lite

在本文的最后,送给大家一个小技巧:
meta实现5秒后页面直接跳转到百度:
<meta http-equiv=”refresh” content=”5s; url=http://www.baidu.com”/>


版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

评论