nodejs 小爬虫

案例:小爬虫问题
从一些简单网页中获取数据
该案例从百度的一个新闻网页中爬出一些数据
该获取数据的方式是基于nodejs环境下的,所以我们要使用该方法的时候,必须处于nodejs环境中

网站爬取一段数据 -> 数据清洗 -> 后端服务器 -> 发送前端 -> 渲染数据
注意:不是所有的网页都是可以爬虫爬到数据的,有反爬虫的操作(爬取数据注意网页的选取)

 const http = require('http');//获得http模块
    const host = 'localhost';//定义域名 
    const port = 3000;//定义端口号(可以随意定义)
    
http.createServer((req, resqonse) => {//建立服务器
    resqonse.writeHead(200, { 'Content-Type': 'text/html;charset=utf8' });

const http = require('http');
const cheerio = require('cheerio'); //数据清洗


//http://baijiahao.baidu.com/s?id=1639178838658195939  //原网页链接
const options = {
    hostname: 'baijiahao.baidu.com', //域名
    port: 80, //端口
    path: '/s?id=1639178838658195939', //链接地址
    method: '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-Encoding': 'gzip, deflate',  //此命令会使代码乱码
        'Accept-Language': 'zh-CN,zh;q=0.9',
        'Cache-Control': 'max-age=0',
        Connection: 'keep-alive',
        Cookie: 'BIDUPSID=F57104E2DB348922CF649CAED73EEAF5; PSTM=1563255237; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BAIDUID=4BB2A84B88C50FFDDD582BC519E7D178:FG=1; H_PS_PSSID=1430_21083_29523_29520_28518_29099_28834_29220_22159; BDSFRCVID=P48sJeCCxG3DxgJwaOOQfSJcXa70GXVmYDdP3J; H_BDCLCKID_SF=tJkfoIDhfIvbfP0khtnDMtA85h5Ka4CXa5rMVMt2fPOkeqOJ2Mt5QbksylJKWMRI5H7Z3MnqJKJnoMQzWfOf05tpexbH55uqtnFDVx5; delPer=0; PSINO=2',
        Host: 'baijiahao.baidu.com',
        'Upgrade-Insecure-Requests': 1,
        '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',
    }
}

http.get(options, (res) => {

    const { statusCode } = res; //获取请求状态码
    const contentType = res.headers['content-type']; //获取请求数据类型

    res.setEncoding('utf8');
    let rawData = '';
    res.on('data', (chunk) => {  //将数据流累加形成完整的数据给下面的操作
        rawData += chunk;
    });
    res.on('end', () => {
        try {
            //console.log(rawData);
            const $ = cheerio.load(rawData); //数据清洗
            $('.bjh-p').each(function() {//获取特定的数据(可选择)
                resqonse.write(`<h3>${$(this).text()}</h3>`); 
            })
            resqonse.end();
        } catch (e) {
            console.error(e.message);
        }
    });
}).on('error', (e) => {
    console.error(`请求遇到问题: ${e.message}`);
});
}).listen(port, host, () => {
    console.log(`The is server running at :http://${host}:${port}`)//终端链接  可点击
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值