当前位置:帮助>网站公告
简易node爬虫爬取天气数据
2018-09-11 10:50

什么是爬虫?

这里指的是网络爬虫、网络蜘蛛,用于在茫茫互联网世界中抓取特定数据,常见的例子就是搜索引擎。

这次的目标

搜索引擎的爬虫当然高端大气上档次,但这次只是需要定向的抓取一些数据,只需要一些简单的操作便能够实现,这次的目标是** 定向抓取天气预报网站的数据,每隔五分钟抓取一次 **

准备工作

本次所用的是nodejs来编写爬虫程序,所以得先安装node和npm工具,一切准备就绪还需安装如下依赖包

//核心依赖"http": "latest","cheerio": "latest",  //类jquery,用于解析网页"request": "latest"

核心代码

主要的工作其实很多前辈已经做过了,像http请求模拟,解析网页等等,这里只需要对爬下来的网页内容进行数据提取就OK了,代码如下:

//抓取当前数据function fetchData(url) {
    http.get(url, function(res) {        var html = '';
        res.on('data', function(chunk) {
            html += chunk;
        });
        res.on('end', function() {            var $ = cheerio.load(html);            try {                //时间格式化
                var DateTime = $('#air>i>div:last-child').text();                var date = DateTime.split(' ');                var strDate = new Date().getFullYear() + '年' + date[0];                var fmDate = strDate.replace(/(\d{4}).(\d{1,2}).(\d{1,2}).+/mg, '$1-$2-$3');                var fetchTime = fmDate + ' ' + date[1];                //取得露点
                var dewP = $('#day-part').children('p');                let dew = dewP[2].childNodes[1].data;                //地区、温度、湿度
                let local = $('#current>h2>a').text();                let temp = $('#current>div:first-child>a>b').text();                let hum = $('.hum>p').text();                //风速,风向
                let windP = $('.wind>p>span').children();                let wind = windP[1].prev.data.trim();                let windArr = wind.split(' ');                let wind_speed = windArr[1] + windArr[2];                let wind_direc = windArr[0];                //体感温度
                let realFeel = $('.rfeel>b').text();                //保存为数组是因为对接下来存储到数据库方便
                let meteoData = [fetchTime, local, temp, hum, dew, wind_speed, wind_direc, realFeel];
                insertSql(meteoData);
            } catch (error) {                console.error(error);
            }

        })
    })
}

后续操作

可以看到,爬数据并不难,上面的代码已经把数据解析好了,接下来的工作主要是存储到数据库和添加定时任务:
1.存储到数据库


实时数据表

//这里需要引入mysql模块npm install mysql --save//核心代码如下function insertSql(data) {    var insertStr = 'insert into real_meteorological(date_time,' +        'local,temp,hum,dew,wind_speed,wind_direction,real_feel)' +        ' values(?,?,?,?,?,?,?,?)';
    connection.query(insertStr, data, function(err, results) {        if (err) {            console.error(err);
        } else {            console.info('success')
        }
    });
}

2.定时任务
定时任务采用setInterval(),代码如下

function loopCatch() {
    setInterval(function() {
        fetchData(url);
    }, 5 * 60 * 1000);
}

最后

想要做到数据抓取并不是很难,前人已经做了太多的工具可以用,我们需要的只不过是合理利用这些工具来组合成我们需要的工具。
顺便说一句:这里测试用的url我并没有给出来,但做法是差不多的


  代理精灵IP平台专业提供HTTP代理IP服务,其中的动态高质量代理重点推荐,多年来服务了很多顾客朋友,高效稳定的质量,受到了一致的好评。代理精灵IP将会继续努力,为广大顾客提供更优质的产品!咨询QQ:800819360,网址:http://www.jinglingdaili.com/


在线咨询
微信公众号

微信公众号

回到顶部