使用Cheerio库和Node.js进行数据爬取

请问”チェリオ” 是什么意思?

這是一個非常強大的JavaScript庫,專為數據爬取而設計。該庫提供了類似於jQuery Selector的Cheerio Selector,所以在使用函數時與使用jQuery Selector非常相似。簡單來說,就像在使用jQuery時,我們可以使用html()函數來獲取HTML代碼,使用attr(name, value)來獲取元素屬性等等,這些與jQuery庫中熟悉的函數相同。有關該庫的工作原理的詳細信息,請參考這裡。

编写一个演示应用程序,可以自动通知用户有新的故事章节时。

我们的步骤如下: de 🙂

    • ステップ1:物語の最新章のリストを取得する。

 

    • ステップ2:新たな章があるかどうかを知るために、JSONのファイルに格納されている章とこの章を比較して新たな章があるかどうかを知る。そのJSONのファイルがない場合は、作成する。

 

    ステップ3:新しい章がある場合はストーリーを取得して、メールで通知を送る。

好吧,我们开始吧。
请安装cheerio和request这两个库。(用于抓取想要的网站数据)
npm install cheerio –save
npm install request –save
npm install nodemailer –save

声明所需的库

const cheerio = require(‘cheerio’);
const request = require(‘request’);
const fs = require(‘fs’);
const nodemailer = require(‘nodemailer’);

使用const来引入cheerio、request、fs和nodemailer库。

然后,创建一个爬虫函数来获取故事页面上最新的章节,并与一个json文件进行比较。

//   ウエブサイトからデータを取得する関数
function Crawler()
{
    // ウエブサイトへリクエストを送る
    request('http://truyencv.com/pham-nhan-tu-tien-chi-tien-gioi-thien/', function (err, res, body) 
    {
        //  cheerio.load関数でデータを取得する
        var $ = cheerio.load(body);
        // 最新のストーリーの章を取得する
        var newestChap = $('.list-overview .item .item-value a').text();
        var obj = {
            'newestChap' : newestChap
        }
        var json = JSON.stringify(obj);
        //  newchap.jsonファイルをあるかどうかチェクする
        if (!fs.existsSync('newchap.json')) {
            //  ない場合は作成する
            fs.writeFile('newchap.json', json, '', (err)=>{
                if (err) throw err;
                console.log('newchap.jsonを作成することができました!');
            });
            return; 
        }
        // プロジェクトの中にnewchap.jsonファイルの内容を読む
        fs.readFile('newchap.json', function readFileCallback(err, data)
        {
            if (err)
            {
                console.log('newchap.jsonファイルを読むことができません!');
                return;
            } 
            else 
            {
                // JSONファイルから最新の章を取得する
                obj = JSON.parse(data); 
                var dbChap = obj.newestChap;
                //  2つの章を比較して違うばあい新章がある
                if(newestChap !== dbChap)
                {
                    // newchap.jsonファイルに新章を保存する
                    fs.writeFile('newchap.json', json, '', (err)=>{
                        if (err) throw err;
                        console.log('新章がある!');
                        console.log('newchap.jsonファイルを編集しました!');
                    });
                    // 新章のリンクを取得する
                    var detailUrl = $('.list-overview .item .item-value a').attr('href');
                    //  新章の情報を取得するためリクエストを作成する
                    request(detailUrl, (err, res, body)=>{
                        let cheerioDetail = cheerio.load(body);
                        let contentDetail = cheerioDetail('.truyencv-read-content .content').text();
                        // メールで通信する
                        sendEmail(newestChap,contentDetail);

                    });
                }
                else{
                    console.log('新章がありません!');
                }
            }
        });
    })
}

为了发送电子邮件,使用nodemailer库添加sendEmail函数进行如下操作。

function sendEmail(subject, content)
{
    var transporter = nodemailer.createTransport({
        service : 'gmail',
        auth: {
            user : 'yourmail@gmail.com',
            pass : 'yourpassword'
        }
    });
    var mailOptions= {
        from : 'yourmail@gmail.com',
        to: 'yourmail@gmail.com',
        subject : 'ストーリーの名前は新章が創刊する' + subject,
        text : content
    }
    transporter.sendMail(mailOptions, function(err, info){
        if(err)
        {
            console.log('メールでエーラが発生しました: ', err);
        }
        else
        {
            console.log('メールを送りました:', info.response);
        }
    });
}

最后,在写一个函数来每3秒重复执行此Crawler操作。

var timer = setInterval(function() { 
    return Crawler(); 
}, 5000);

然后,在命令窗口中运行server.js,并等待邮件发送。
接下来,我解释了如何使用cheerio和nodejs进行爬虫演示的简单演示。
谢谢你的阅读。

bannerAds