node爬虫-小说

var http = require("http")
var fs = require("fs")
var cheerio = require("cheerio")//可以理解为运行在后台的 jQuery
var iconv = require("iconv-lite")// 模块进行转码,中文显示正常后开始解析源码
var request = require('sync-request')//因为需要确保章节的顺序,所以这里引进 sync-request 模块进行同步 request 请求资

var url = 'http://www.qmlike.com/m/read-htm-tid-319317-page-50.html#yinzi'
http.get(url, function(res) {  //资源请求
    var chunks = [];

    res.on('data', function(chunk) {
        chunks.push(chunk)
    })
    res.on('end', function() {
        var html = iconv.decode(Buffer.concat(chunks), 'gb2312') //转码操作

        var $ = cheerio.load(html, {
            decodeEntities: false//如果设置为true,将对文档中的实体进行解码。默认为false。
        })

        var content = $("tbody")
        var links = []


        for(var i=1;i<68;i++){
            var link={};
            link.title = $(this).text()
            link.link =  'http://www.qmlike.com/m/read-htm-tid-319317-page-'+i+'.html#yinzi' //补齐 URL 信息
            links.push(link)
        }
        //将url信息写入list.json;其实这一步是多余的,可以省略。直接getContent;
        fs.writeFile("list.json", JSON.stringify(links), function(err) {
            if (!err) {
                console.log("写文件成功")
                var urlList = JSON.parse(fs.readFileSync('list.json', 'utf8'))
                for (var i = 0; i < urlList.length; i++) {
                    getContent(urlList[i])
                }
            }
        })
        function getContent(chapter) {
            var res = request('GET',chapter.link)
            var html = iconv.decode(res.body, 'gb2312') //获取源码

            var $ = cheerio.load(html, {
                decodeEntities: false
            })
            var content = ($("div.yinzi").text()).replace(/\&nbsp;/g, '')
           //生成xx.txt;
            if (fs.existsSync('xx.txt')) {//如果路径存在,则返回 true,否则返回 false
            //同步地将数据追加到文件中,如果文件尚未存在,则创建文件
                fs.appendFileSync('xx.txt',  chapter.title)//
                fs.appendFileSync('xx.txt', content)
            } else {
                fs.writeFileSync('xx.txt', chapter.title)//同步写入数据到文件,如果文件已经存在,则替代文件
                fs.appendFileSync('xx.txt', content)
            }

            console.log(content);
        }
    }).on('error', function() {
        console.log("网页访问出错")
    })
})
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值