nodejs爬取笔趣阁小说

多说无益,直接上代码

var http = require("http");
var express = require("express");
var request = require('request');
var async = require("async");
var fs = require('fs');
var iconv = require('iconv-lite');
var cheerio = require('cheerio');
var app = express();
let k = 1;
let breakNum = 1;
down(k)
async function down(i) {
    let old = 0;
    request({
        url: "https://www.biqugex.com/book_" + i + "/",//请求路径
        method: "GET",//请求方式,默认为get
        headers: {
            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
            "Accept-Language": "zh-CN,zh;q=0.9",
            "Cache-Control": "max-age=0",
            "Connection": "keep - alive",
            "Host": "www.biqugex.com",
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
        },
        encoding: null,
    }, await function (err, res, body) {
        //转码
        let html = iconv.decode(body, "gb2312");
        //小说名

        let bookName = html.match(/<h2>.*<\/h2>/)[0].replace(/<(\S*?)[^>]*>.*?|<.*? \/>/g, "");
        //获取小说章节元素
        let textBody = html.split("</dt>")[2].split("</dl>")[0];
        //拆分元素获取地址
        let url = textBody.split('"');
        let urlList = [];
        console.log(urlList.length)
        for (let i = 1; i < url.length; i += 2) {
            //把地址存入数组
            urlList.push("https://www.biqugex.com" + url[i])
        }
        console.log(urlList.length)
        fs.mkdir(__dirname + "/" + bookName + "/", function (err) {
            if (err) {
                return console.error(err);
            }
            console.log("目录创建成功。");
        });
        async.mapLimit(urlList, 50, function (url, callback) {
            request({
                url: url,//请求路径
                method: "GET",//请求方式,默认为get
                headers: {
                    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
                    "Accept-Language": "zh-CN,zh;q=0.9",
                    "Cache-Control": "max-age=0",
                    "Connection": "keep - alive",
                    "Host": "www.biqugex.com",
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
                },
                encoding: null,
            }, function (err, res, body) {
                
                if (err) {
                    if (err.code == "ENOTFOUND") {
                        breakNum++
                        return
                    }
                    console.log(url)
                    console.log(body)
                    console.log(err)
                }
                console.log(old, urlList.length - 1)
                if (old == urlList.length - breakNum) {
                    console.log(121212)
                    if (k > 100) {
                        return
                    }
                    k++;
                    down(k)
                }
                let htmlBody = iconv.decode(body, "gb2312");
                let $ = cheerio.load(htmlBody);
                //过滤本章地址
                let title = $("h1").text()
                let testText = $("#content").text().replace(/(https?|ftp|file):\/\/[-A-Za-z0-9+&@#\/%?=~_|!:,.;]+[-A-Za-z0-9+&@#\/%=~_|]/g, "");
                //过滤笔趣阁广告
                let text = testText.replace("请记住本书首发域名:www.biqugex.com。笔趣阁手机版阅读网址:m.biqugex.com", "")
                old++
                fs.writeFile('./' + bookName + '/' + title + ".txt", text, function (err) {
                })
                callback(null, url)
            })
        }, function (error, results) {
            console.log("result :");
            console.log(results);
        })
    })
}
app.listen(3000);

一步一个坑的走过来的,虽然不到一百行代码,写起来可真是要命

所有原创文章采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。
您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
本站部分内容收集于互联网,如果有侵权内容、不妥之处,请联系我们删除。敬请谅解!

  Previous post gojs恢复页面内存
Next post   Axios封装

添加新评论

你的选择是做或不做,但不做就永远不会有机会。

凡事顺其自然,遇事处于泰然,得意之时淡然,失意之时坦然,艰辛曲折必然,历尽沧桑悟然。

生命要得到丰盛的收获,必需阳光;同时,也需要“雨”的浇灌。

人生应该树立目标,否则你的精力会白白浪费。

山涧的泉水经过一路曲折,才唱出一支美妙的歌。

常求有利别人,不求有利自己。

只有脚踏实地的人,才能够说:路,就在我的脚下。

无论选择做什么,追求完美的程度决定成就的高度。

这个世界最脆弱的是生命,身体健康,很重要。

上帝说:你要什么便取什么,但是要付出相当的代价。

成功源于不懈的努力。

暗自伤心,不如立即行动。

再多一点努力,就多一点成功。

得意淡然,失意坦然;喜而不狂,忧而不伤。

海纳百川,有容乃大;壁立千仞,无欲则刚。

生活其实很简单,过了今天就是明天。

你要记住你不是为别人而活,你是为自己而活。

岂能尽随人愿,但求无愧我心。

在你内心深处,还有无穷的潜力,有一天当你回首看时,你就会知道这绝对是真的。

活在当下,别在怀念过去或者憧憬未来中浪费掉你现在的生活。

挫折时,要像大树一样,被砍了,还能再长;也要像杂草一样,虽让人践踏,但还能勇敢地活下去。