• <th id="bb20k"></th>
    1. <th id="bb20k"></th>
      1. <th id="bb20k"></th>
        <progress id="bb20k"></progress>

        當前位置:幫助>網站公告
        簡易node爬蟲爬取天氣數據
        2018-09-11 10:50

        什么是爬蟲?

        這里指的是網絡爬蟲、網絡蜘蛛,用于在茫?;ヂ摼W世界中抓取特定數據,常見的例子就是搜索引擎。

        這次的目標

        搜索引擎的爬蟲當然高端大氣上檔次,但這次只是需要定向的抓取一些數據,只需要一些簡單的操作便能夠實現,這次的目標是** 定向抓取天氣預報網站的數據,每隔五分鐘抓取一次 **

        準備工作

        本次所用的是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.www.52chanpin.com/


        在線咨詢
        微信公眾號

        微信公眾號

        回到頂部
        国产欧美 一区,国产一本大道香蕉AV,国产亚洲卡通另类图片,国产高清AV在线