【nodejs】---最简单的用nodejs爬取数据的方法---【北杨】

将www.baidu.com的页面内容copy至index.html中

const http=require('https');
const fs=require('fs');
//发起服务器短的请求
http.get('https://www.baidu.com/', (res) => {
  // console.log(res)
  // console.log(res.statusCode)
   const { statusCode } = res;//状态码
   const contentType = res.headers['content-type'];//请求类型
    console.log(contentType)
    // new Error('你错了') 错误信息对象
  let error;

  if (statusCode !== 200) {
    error = new Error('状态码不是200');
  } else if (!/^text\/html/.test(contentType)) {
    error = new Error('文件格式不对');
  }

  if (error) {
    console.log(error.message);
    // consume response data to free up memory
    res.resume();// 清除请求缓存
    return;
  }
   // 数据处理
  res.setEncoding('utf8');
  //设置数据的编码格式
  let rawData = '';
  res.on('data', (chunk) => {// 接受分段数据会触发 chunk 接受到的分段数据
   rawData += chunk;
    });
  res.on('end', () => {
    //接受信息完毕 会触发end 方法
    fs.writeFileSync('./index.html',rawData)
  });
})
.on('error', (e) => {
  // 如果请求出错会触发error事件
  console.error(`Got error: ${e.message}`);
});

可获取到url中的每个图片的src属性信息,着重查看 res.on(‘end’, () => {});

  // 1. 获取网页的源代码
  // 2. 对源代码进行分析 获取数据  字符  图片的地址    音乐的地址 

const cheerio = require('cheerio')//引入模块
const http=require('https');
const fs=require('fs');
//发起服务器短的请求
http.get('https://www.qunar.com/', (res) => {
   const { statusCode } = res;//状态码
   const contentType = res.headers['content-type'];//请求类型
    console.log(contentType)
  let error;

  if (statusCode !== 200) {
    error = new Error('状态码不是200');
  } else if (!/^text\/html/.test(contentType)) {
    error = new Error('文件格式不对');
  }

  if (error) {
    console.log(error.message);
    // consume response data to free up memory
    res.resume();// 清除请求缓存
    return;
  }
   // 数据处理
  res.setEncoding('utf8');
  //设置数据的编码格式
  let rawData = '';
  res.on('data', (chunk) => {// 接受分段数据会触发 chunk 接受到的分段数据
   rawData += chunk;
    });
  res.on('end', () => {
    //接受信息完毕 会触发end 方法
  // fs.writeFileSync('./index.html',rawData)
	 const $ = cheerio.load(rawData)
	// 将一段满足html格式的字符串进行处理
	 $('img').each(function(index,el){
	 	console.log($(this).attr('src'))
	 })

	// 通过jq 的方式获取元素
  });
})
.on('error', (e) => {
  // 如果请求出错会触发error事件
  console.error(`Got error: ${e.message}`);
});

通过每个图片的src属性将图片copy到指定的位置

// 下载图片原理
// 通过http 请求图片数据 然后将图片保存到本地
// let url='http://api.douban.com/v2/movie/top250?start=25&count=1';


const http=require('https');
const fs=require('fs');
//发起服务器短的请求
http.get('https://www.baidu.com/img/bd_logo.png', (res) => {
   const { statusCode } = res;//状态码
   const contentType = res.headers['content-type'];//请求类型
  let error;

  if (statusCode !== 200) {
    error = new Error('状态码不是200');
  }


  if (error) {
    console.log(error.message);

    res.resume();
    return;
  }
   // 数据处理
  res.setEncoding('binary');//设置数据格式为二进制
  //设置数据的编码格式
  let rawData = '';
  res.on('data', (chunk) => {
   rawData += chunk;
    });
  res.on('end', () => {
  	console.log(rawData)
     fs.writeFile('./test1.png',rawData,'binary',(err)=>{
         if (err) {throw err}
         console.log('下载ok')
     })
  });
})
.on('error', (e) => {
  // 如果请求出错会触发error事件
  console.error(`Got error: ${e.message}`);
});

你可能感兴趣的:(nodejs)