Contoh data rangkak nod: Mari kita bincangkan tentang cara merangkak bab novel

青灯夜游
Lepaskan: 2022-06-02 21:08:45
ke hadapan
3728 orang telah melayarinya

Bagaimanakah data merangkak nod? Artikel berikut akan berkongsi dengan anda contoh perangkak nod dan bercakap tentang cara menggunakan nod untuk merangkak bab novel saya harap ia akan membantu semua orang.

Contoh data rangkak nod: Mari kita bincangkan tentang cara merangkak bab novel

Jika anda akan menggunakan electron untuk membuat alat bacaan novel untuk diamalkan, perkara pertama yang perlu diselesaikan ialah masalah data, iaitu teks novel.

Di sini kita akan menggunakan nodejs untuk merangkak laman web novel, cuba merangkak novel seterusnya, data tidak akan disimpan dalam pangkalan data, mula-mula gunakan txt sebagai storan teks

Untuk permintaan tapak web dalam node, sudah ada perpustakaan http dan https, yang mengandungi kaedah permintaan request.

Contoh:

request = https.request(TestUrl, { encoding:'utf-8' }, (res)=>{
    let chunks = ''
    res.on('data', (chunk)=>{
        chunks += chunk
    })
    res.on('end',function(){
        console.log('请求结束');
    })
})
Salin selepas log masuk

Tetapi itu sahaja Ia hanya mengakses data teks html dan tidak boleh mengekstrak elemen dalaman ( Anda juga boleh mendapatkannya dengan kerap, tetapi ia terlalu rumit) .

Saya menyimpan data yang diakses melalui kaedah fs.writeFile, iaitu hanya html keseluruhan halaman web

Contoh data rangkak nod: Mari kita bincangkan tentang cara merangkak bab novel

Tetapi ada perkara lain yang saya mahu Kandungan dalam bab, dengan cara ini, anda perlu mendapatkan hiperpautan bab, membentuk senarai pautan pautan dan merangkaknya

Contoh data rangkak nod: Mari kita bincangkan tentang cara merangkak bab novel

perpustakaan cheerio

Jadi, di sini kami akan memperkenalkan perpustakaan js, cheerio

Dokumen rasmi: https://cheerio.js.org/

Dokumen Cina : https: //github.com/cheeriojs/cheerio/wiki/Chinese-README

Dalam dokumentasi, anda boleh menggunakan contoh untuk nyahpepijat

Contoh data rangkak nod: Mari kita bincangkan tentang cara merangkak bab novel


Gunakan cheerio untuk menghuraikan HTML

Apabila cheerio menghuraikan html, kaedah mendapatkan nod dom adalah serupa dengan jquery.

Cari data nod DOM yang anda inginkan berdasarkan html halaman utama buku yang diperoleh sebelum ini

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')
})
Salin selepas log masuk

Cetak maklumat

Contoh data rangkak nod: Mari kita bincangkan tentang cara merangkak bab novel

Maklumat ini juga boleh disimpan pada masa yang sama

Contoh data rangkak nod: Mari kita bincangkan tentang cara merangkak bab novel


Sekarang nombor bab dan pautan bab tersedia, anda boleh mendapatkan kandungan bab.

Oleh kerana merangkak batch akhirnya memerlukan proksi IP, kami belum bersedia buat sementara waktu, kami akan menulis kaedah untuk mendapatkan kandungan bab tertentu dalam novel

Merangkak bab tertentu Kandungan sebenarnya agak mudah:

// 爬取某一章节的内容方法
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)
Salin selepas log masuk

Contoh data rangkak nod: Mari kita bincangkan tentang cara merangkak bab novel


Dengan cara ini, anda boleh mencipta antara muka panggilan berdasarkan kaedah di atas dan lulus dalam parameter bab yang berbeza Dapatkan data bab semasa

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("启动了。。。");
})
Salin selepas log masuk

Kesan:

Contoh data rangkak nod: Mari kita bincangkan tentang cara merangkak bab novel

Kini, antara muka carian bab yang mudah. sudah sedia, dan beberapa parameter juga boleh dibuat Di luar pertimbangan.

Untuk antara muka data yang berbeza, kaedah pemprosesan perangkak juga berbeza Walau bagaimanapun, dalam pautan yang dirangkak kali ini, paparan kandungan tidak dipaparkan secara dinamik oleh bahagian hadapan, jadi anda boleh merangkak terus html statik. Boleh. Jika data adalah rentetan json yang diperolehi melalui Ajax atau seumpamanya, maka data mesti diminta melalui antara muka rangkaian.

Untuk lebih banyak pengetahuan berkaitan nod, sila lawati: tutorial nodejs!

Atas ialah kandungan terperinci Contoh data rangkak nod: Mari kita bincangkan tentang cara merangkak bab novel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:juejin.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!