ホームページ > ウェブフロントエンド > jsチュートリアル > ノードクローリングデータの例: 小説の章をクロールする方法について話しましょう

ノードクローリングデータの例: 小説の章をクロールする方法について話しましょう

青灯夜游
リリース: 2022-06-02 21:08:45
転載
3809 人が閲覧しました

ノードはどのようにデータをクロールしますか?次の記事では、node クローラーの例を紹介し、node を使用して小説の章をクロールする方法について説明します。

ノードクローリングデータの例: 小説の章をクロールする方法について話しましょう

electron を使用して、練習用の新しい読書ツールを作成します。最初に解決するのはデータの問題です。小説の本文。

ここでは、nodejs を使用して小説 Web サイトをクロールします。次の小説をクロールしてみます。データはデータベースに保存されません。最初に txt## を使用します。 # テキスト ストレージとして使用します

node の Web サイト リクエストの場合、http および https ライブラリがあり、これらには request が含まれますリクエストのメソッド。

例:

request = https.request(TestUrl, { encoding:'utf-8' }, (res)=>{
    let chunks = ''
    res.on('data', (chunk)=>{
        chunks += chunk
    })
    res.on('end',function(){
        console.log('请求结束');
    })
})
ログイン後にコピー

しかしそれだけです。

html テキスト データにアクセスするだけで、内部要素を抽出することはできません。作業 (定期的に取得することもできますが、複雑すぎる)。

アクセスされたデータは

fs.writeFile メソッドを通じて保存しました。これは Web ページ全体の単なる HTML です。

ノードクローリングデータの例: 小説の章をクロールする方法について話しましょう

しかしI 必要なのは各章のコンテンツです。このようにして、章のハイパーリンクを取得し、ハイパーリンクのリンク リストを作成して、それをクロールする必要があります。 #cheerio library

#ということで、ここではjsライブラリ##cheerio

ノードクローリングデータの例: 小説の章をクロールする方法について話しましょう

公式ドキュメント: https://cheerio.js.org/ を紹介します。

中国語のドキュメント: https://github.com/cheeriojs/cheerio/wiki/ Chinese-README

ドキュメントでは、デバッグ用の例を使用できます

##cheerio を使用して HTML を解析する

cheerio が HTML を解析する場合、dom ノードを取得する方法は

jquery## と似ています。 #。

以前に取得した書籍のホームページの HTML に基づいて必要な dom ノード データを見つけますノードクローリングデータの例: 小説の章をクロールする方法について話しましょう

const fs = require('fs')
const cheerio = require('cheerio');

// 引入读取方法
const { getFile, writeFun } = require('./requestNovel')

let hasIndexPromise = getFile('./hasGetfile/index.html');

let bookArray = [];

hasIndexPromise.then((res)=>{
    let htmlstr = res;
    let $ = cheerio.load(htmlstr);

    $(".listmain dl dd a").map((index, item)=>{
        let name = $(item).text(), href = 'https://www.shuquge.com/txt/147032/' + $(item).attr('href')
        if (index > 11){
            bookArray.push({ name, href })
        }
        
    })
    // console.log(bookArray)
    writeFun('./hasGetfile/hrefList.txt', JSON.stringify(bookArray), 'w')
})
ログイン後にコピー

情報を印刷します

わかりました同時に、この情報も保存されます。

#章の数と章へのリンクが表示されたので、章の内容を取得できます。

バッチクローリングは最終的にIPプロキシが必要なのでまだ準備ができていませんが、とりあえず小説のとある章の内容を取得するメソッドを書きます

ノードクローリングデータの例: 小説の章をクロールする方法について話しましょう

特定の章をクロールする 内容は実際には比較的単純です:

// 爬取某一章节的内容方法
function getOneChapter(n) {
    return new Promise((resolve, reject)=>{
        if (n >= bookArray.length) {
            reject('未能找到')
        }
        let name = bookArray[n].name;
        request = https.request(bookArray[n].href, { encoding:'gbk' }, (res)=>{
            let html = ''
            res.on('data', chunk=>{
                html += chunk;
            })
            res.on('end', ()=>{           
                let $ = cheerio.load(html);
                let content = $("#content").text();
                if (content) {
                    // 写成txt
                    writeFun(`./hasGetfile/${name}.txt`, content, 'w')
                    resolve(content);
                } else {
                    reject('未能找到')
                }
            })
        })
        request.end();
    })
}

getOneChapter(10)
ログイン後にコピー

ノードクローリングデータの例: 小説の章をクロールする方法について話しましょう


このようにして、上記に従って呼び出しインターフェイスを作成できます。メソッドを使用して、さまざまなチャプタ パラメータを渡し、現在のチャプタ データを取得します。

const express = require('express'); 
const IO = express();
const { getAllChapter, getOneChapter } = require('./readIndex')
// 获取章节超链接链表
getAllChapter();

IO.use('/book',function(req, res) {
    // 参数
    let query = req.query;
    if (query.n) {
        // 获取某一章节数据
        let promise = getOneChapter(parseInt(query.n - 1));
        promise.then((d)=>{
            res.json({ d: d })
        }, (d)=>{
            res.json({ d: d })
        })
    } else {
        res.json({ d: 404 })
    }
    
})

//服务器本地主机的数字
IO.listen('7001',function(){
    console.log("启动了。。。");
})
ログイン後にコピー

効果:

これで、シンプルなチャプタ検索インターフェイスが準備できました。パラメータの判定も可能です。

データインターフェースが異なれば、クローラーの処理方法も異なりますが、今回クロールしたリンクでは、コンテンツの表示がフロントエンドによって動的にレンダリングされないため、静的なHTMLを直接クロールできます。 。 できる。データが Ajax またはその他のメソッドを通じて取得された json 文字列である場合、データはネットワーク インターフェイスを通じてリクエストする必要があります。 ノードクローリングデータの例: 小説の章をクロールする方法について話しましょう

ノード関連の知識の詳細については、
nodejs チュートリアル

を参照してください。

以上がノードクローリングデータの例: 小説の章をクロールする方法について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:juejin.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート