利用node.js写爬虫 爬取某相亲网站全部交友信息

点击查看爬取世纪佳缘相亲交友信息

利用node.js,写了一个爬虫js。1个小时左右的时间,便爬取了2000多条交友信息,包括网名,年龄,图片,学历,工资等。当然,爬取的速度和网速有很大的关系,也和你要爬取的网站响应的速度有关。先看一下,爬取的成果(涉及隐私,面部全部打上马赛克)

说一下思路和代码流程:

首先require引入http(如果爬取的网站是https安全模式的话,引入https),fs,  path 。代码如下:

 

var https = require("https");
var http = require("http");
var fs = require("fs");
var path = require("path");
var file;

 

封装一个下载图片到本地的函数,也就是说,给这个函数传一个图片在互联网的地址就可以下载这张图片到本地。图片的命名采用爬虫爬取的网名+性别+交友宣言+学历+工资..........

 

function downPic(url) {
    var filename = path.join("images",file);
    http.get(url,function (res) {
        res.setEncoding("binary");
        var data = "";
        res.on("data",function (chunk) {
            data+=chunk;
        });
        res.on("end",function () {
            fs.writeFile(filename, data,{encoding:"binary"}, function (err) {
                if (err){
                    console.log(err);
                }else {
                    console.log("下载成功!");
                };
            });
        });
    });
}

 

选择想要爬取网站的地址url(比如:http://www.xxxx.com),先把这个网站所有的html爬取下来。

 

var file="http://www.xxxx.com"
http.get(file,function (res) {
    var data = "";
    res.on("data",function (chunk) {
        data += chunk;
    });
    res.on("end",function (){
        console.log(data); }

 

如上代码,data中已经保存了该页面的所有html文档内容。剩下了就是对这个data中有用的信息进行处理。利用强大的正则表达式对该页面进行筛选。然后把所有的有用信息,存在数组里边。

 

var reg_img = /src="(http:\/\/[a-zA-Z0-9-/_.]+)" alt="/g; //爬取图片
    var reg_name = /" target="_blank">([a-zA-Z0-9-\u4E00-\u9FA5/]+)<\/a><\/span>/g; //爬取网名
    var reg_info = /"fz12">([a-zA-Z0-9-\u4E00-\u9FA5,\s]+)/g; //爬取信息
    var reg_address = /    ([\u4E00-\u9FA5\s-]+)<br/g; //爬取地址
    var reg_salary=/月薪:([0-9-\u4E00-\u9FA5\s-]+)<\/p/g; //爬取工资
    var reg_intro=/" target="_blank">([a-zA-Z0-9-\u4E00-\u9FA5 \/,?。;:'"、.\r\n\s]+)<\/a><\/p>/g;  //爬取介绍
    var temp;
    var imgs = [];
    var names = [];
    var infos = [];
    var address = [];
    var salarys = [];
    var intros = [];

    while ((temp=reg_img.exec(data))!=null){
        imgs.push(temp[1]);
    }
    while ((temp=reg_name.exec(data))!=null){
        names.push(temp[1]);
    }
    while ((temp=reg_info.exec(data))!=null){
        infos.push(temp[1]);
    }
    while ((temp=reg_address.exec(data))!=null){
        address.push(temp[1].trim());
    }
    while ((temp=reg_salary.exec(data))!=null){
        salarys.push(temp[1]);
    }
    while ((temp=reg_intro.exec(data))!=null){
        intros.push(temp[1]);
    }
    for(var i=0;i<imgs.length;i++)
    {   a++;
        file=a+" 网名:"+names[i]+" 信息:"+infos[i]+" 地址:"+address[i]+" 工资:"+salarys[i]+"元"+"介绍:"+intros[i]+".jpg";
        downPic(imgs[i]);
    }
})

 

 

 

到这里一个页面的信息就爬取完了,要想爬取多个页面。就要改变url,然后多次代用上面的代码。多次调用可以通过for()循环,或者通过setInterval()定时器每隔一段时间调用一次。建议通过定时器进行调用,因为通过for循环的话,太快!且不说你自己的电脑受不受得了,而且你不断的爬取获取该网站的内容,容易被该网站发现。很多的网站都有反爬虫监控。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值