日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
實(shí)現(xiàn)一個簡易爬蟲&啟動定時任務(wù)-創(chuàng)新互聯(lián)

爬蟲

成都創(chuàng)新互聯(lián)公司10多年企業(yè)網(wǎng)站制作服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計(jì)及高端網(wǎng)站定制服務(wù),企業(yè)網(wǎng)站制作及推廣,對成都攪拌罐車等多個方面擁有多年的網(wǎng)站營銷經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。

目前 node.js 爬蟲工具比較火的有 node-crawler puppeteer。不過我目前沒打算用這些,因?yàn)橹辽佻F(xiàn)在我們的項(xiàng)目還用不到。只要能發(fā)送請求、解析dom我們就能自己實(shí)現(xiàn)一個爬蟲。所以我選擇了axios + cheerio來自己寫爬蟲。

首先我們用 axios + cheerio 來獲取首頁編輯推薦文章,并解析出這篇文章的正文部分。

// controller/crawler.js 文件
const axios = require('axios');
const cheerio = require('cheerio');
// articleCtrl是一個寫好了的controller,里面有存儲數(shù)據(jù)到mongo的邏輯。
const articleCtrl = require('./article');

async function cnblogs () {
    const res = await axios.get('https://www.cnblogs.com/');
    // 把a(bǔ)xios得到的數(shù)據(jù)用cheerio解析,解析后的$對象擁有jquery的能力,可以通過jquery api直接操作dom
    const $ = cheerio.load(res.data);
    const $href = $('#editor_pick_lnk');
    let name = $href.text();
    // 找到編輯推薦文章的url,繼續(xù)訪問該頁面
    let href = $href.attr('href');

    const subRes = await axios.get(href);
    const $$ = cheerio.load(subRes.data);
    // 獲得編輯推薦文章的正文部分的html
    const bodyStr = $$('#cnblogs_post_body').html();
    // 存入mongodb,具體articleCtrl.create方法的實(shí)現(xiàn)可以從項(xiàng)目源碼中看,位置express/controller/article.js
    const cRes = await articleCtrl.create({
        from: 'cnblogs',
        title: name,
        article: bodyStr,
        hot_level: 1,
        favor: 1,
        comment: 1
    });
};

module.exports = {
    cnblogs
};

通過上面簡單的代碼,我們就能把推薦文章正文部分存到數(shù)據(jù)庫。接下來要創(chuàng)建定時任務(wù),把每天的推薦文章都存到自己的數(shù)據(jù)庫了。

定時任務(wù)
實(shí)例
定時任務(wù)工具我選擇 node-schedule ,先上實(shí)例,后面再詳細(xì)講下用法。

// schedule/index.js 文件
var schedule = require('node-schedule');

// 可以按照cron的格式設(shè)置
function runSchedule (cb) {
    // cron風(fēng)格的配置:每天上午10點(diǎn)執(zhí)行一次
    schedule.scheduleJob('0 0 10 * * *', function () {
        console.log('定時任務(wù)執(zhí)行一次');
            cb && cb();
    });
    // object風(fēng)格的配置:每天上午10點(diǎn)執(zhí)行一次
    // 注意,這里需要加minute:0, 否則10點(diǎn)的每一分鐘都執(zhí)行一次。
    schedule.scheduleJob({hour: 10, minute: 0}, function () {
        console.log('定時任務(wù)執(zhí)行一次');
            cb && cb();
    });
}

module.exports = runSchedule;
接下來講講 cron 與 object 兩種配置風(fēng)格的差異。

建議大家直接用 cron 風(fēng)格的配置方式。當(dāng)我第一次看到 object 配置風(fēng)格的時候也覺得很人性化,可用過后會發(fā)現(xiàn)坑太多,越用成本越大。不信可以慢慢看

object風(fēng)格

// 每天上午7點(diǎn)的每分鐘都執(zhí)行一次 (本以為會每天7點(diǎn)執(zhí)行一次)
let obj = { hour: 7};

// 同上
let obj = { hour: 7, minute: null};

// 上午7點(diǎn)整執(zhí)行一次
let obj = { hour: 7, minute: 0};

// 每秒執(zhí)行一次
let obj = { second: null }

// 每分鐘執(zhí)行一次
let obj = { hour: null }; // 費(fèi)解,這個不應(yīng)該是每小時執(zhí)行一次嗎

// 每分鐘執(zhí)行一次
let obj = { minute: null };

// 每小時執(zhí)行一次
let obj = { hour: null, minute: 0 }
cron風(fēng)格定時器
* * * * * * 每秒執(zhí)行一次
0 * * * * * 每分鐘的第0秒執(zhí)行一次
0 0 * * * * 每小時的0分0秒執(zhí)行一次
0 0 7 * * * 每天早上7點(diǎn)的0分0秒執(zhí)行一次
0 0 7 1 * * 每月的1日早上7點(diǎn)0分0秒執(zhí)行一次
0 0 7 * * 1 每周1的早上7點(diǎn)0分0秒執(zhí)行一次
對比完了這兩種風(fēng)格能明顯的看出:雖然 object 更人性化但個人覺的有點(diǎn)中看不中用的感覺。尤其是對于個性化的配置,object 顯的很蹩腳,而且你根本沒法查,沒那么多使用說明給到你。相比下 cron 本身就是linux的通用定時任務(wù),各種玩法都被人用了多少遍了。

啟動定時任務(wù)
最后,在 app.js 補(bǔ)上下面的邏輯,node app.js 啟動服務(wù),等待定時任務(wù)的執(zhí)行吧。

const runSchedule = require('./schedule');
const crawlerCtrl = require('./controller/crawler');

function listen () {
    app.listen('3000', () => {
        console.log('listen: 3000');
        // 開啟自動腳本
        runSchedule(function() {
            crawlerCtrl.cnblogs();
        })
    });
}

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


本文名稱:實(shí)現(xiàn)一個簡易爬蟲&啟動定時任務(wù)-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://www.dlmjj.cn/article/eihej.html