node.js 简易爬虫

node.js的一个简易爬虫

const http = require('https')//导入模块 ,目标网站是http的要导入http , https的要导入https
const fs = require('fs')//导入文件模块 
const cherrio = require('cheerio') //导入第三方模块 , 可以使用jq的选择器等

// let url = 'http://www.haloworld.xyz';
let url = 'https://www.taobao.com/';//url字符串
let json = 'http://nodejs.org/dist/index.json';//测试类型检验的json字符串
let data = '' ;//空字符串

http.get(url, (res) => {
    //安全判断
    const {statusCode} = res; //z状态码
    const contentType = res.headers['content-type']; //文件类型

    console.log(statusCode, contentType);

    let err = null; 设置err默认为空
    if (statusCode !== 200) {
        err = new Error('请求状态错误')
    } else if (!/^text\/html/.test(contentType)) {
        err = new Error('请求类型错误')
    }

    if (err) {
        console.log(err);
        res.resume(); //重置缓存
        return; //错误存在不继续向下执行
    }

	//
    //数据分段 , 只要接收数据就会触发data事件 , chunk表示每次接收的数据片段
    res.on('data', chunk => {
        console.log('-----数据传输-----');
        // console.log(chunk.toString());
        data += chunk.toString(); //请求下来的所有数据

    })

    //数据流传输完毕会自动触发end事件
    res.on('end', () => {
        let $ = cherrio.load(data)
        //目标数据
        let needData = $('img').each((index, el) => {
            // console.log($(el).attr('src'));

        })
        fs.writeFileSync('./needData.txt',needData)//向本地写入目标数据
        fs.writeFileSync('./data.txt',data,{ //向本地写入请求下来的左右数据
            encoding:'utf-8',
            flag:'w'
        })
        console.log('数据传输完毕,文件已经创建');

    })
}).on('error', err => {
    console.log('出错' + err);
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值