全栈一(爬虫)

// 爬虫 
const http = require('http'); //导入模块
const fs = require('fs');
// 分析网址的第三方模块
const cheerio = require('cheerio');
// let str = 'https://nodejs.org/dist/index.json'; //访问对象的url地址
let str = 'http://www.4399.com/';
//get请求 获取目标王者
http.get(str, (res) => {
    
    

  //获取响应的状态码
  const {
    
     statusCode } = res;
  //设置响应的内容类型
  const contentType = res.headers['content-type'];

//   处理错误
  let error;
  // 任何 2xx 状态码都表示成功的响应,但是这里只检查 200。
  if (statusCode !== 200) {
    
    
    error = new Error('请求失败\n' +
                      `状态码: ${
      
      statusCode}`);
  } else if (!/^text\/html/.test(contentType)) {
    
    
    error = new Error('无效的 content-type.\n' +
                      `期望的是 application/json 但接收到的是 ${
      
      contentType}`);
  }
  if (error) {
    
    
    console.error(error.message);
    // 消费响应的数据来释放内存。
    res.resume();
    return;

  }

//设置字符集
    res.setEncoding('utf8');
    let rawData = ''; //存储获取到的数据
    //监听了一个 数据流 事件
    res.on('data', (chunk) => {
    
     
      rawData += chunk; 
    });
    //监听了一个 结束的 事件
    res.on('end', () => {
    
    
        console.log(rawData);
        $ = cheerio.load(rawData); //加载html,返回jQuery对象
        $('a').each(function(){
    
    
            fs.appendFileSync('./a.txt',$(this).attr('href') + '\n');
        })
       fs.writeFile('./4399.html',rawData,(err)=>{
    
    
           if(!err){
    
    
               console.log('爬取成功');
           }
       })
      
    });
});

猜你喜欢

转载自blog.csdn.net/qq_52151772/article/details/115051540
今日推荐