通过Node.js 请求数据,下载图片等内容

105 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

使用 node 命令批量 请求文件

Node.js

官网: nodejs.org/en/

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时。 使得其性能特别好! Node.js 是一个开源和跨平台的 JavaScript 运行时环境。 它几乎是任何类型项目的流行工具!

小示例: 使用node.js 启动一个服务,

使得前端也可使用 JavaScript 代码编写一个请求接口:

// 引入 http 模块
const http = require('http')

const hostname = '127.0.0.1'
const port = 3000

// 服务逻辑:
const server = http.createServer((req, res) => {
  res.statusCode = 200
  res.setHeader('Content-Type', 'text/plain')
  res.end('Hello World\n')
})

// 启动服务
server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`)
})

批量请求文件

用到的模块有: http, request, fs, bluebird 等模块

var http = require("http");
var request = require("request");
var fs = require("fs");
var Promise = require("bluebird");
var curIndex = 1217;
var curYear = 2018;
// 下载文件 方法函数
function downloadFile(uri, filename) {
  return new Promise((resolve, reject) => {
    console.log("downloadURL:" + uri);
    request(
      {
        uri: uri,
        encoding: "binary",
        method: "GET",
        headers: {
          referer: "Referer",
        },
      },
      (error, response, body) => {
        if (!error && response.statusCode == 200) {
          fs.writeFileSync(filename, body, "binary");
          console.log("downloaded:" + filename);
          resolve();
        }
      }
    );
  });
}
var downDest = "D:/AAcode/js-patu"; // 下载路径,可改成自己提前建立好的文件夹,需要提前建立好
var downloadArr = [];
while (curYear <= 2018) {
  let yearPath = downDest + "/" + curYear;
  if (!fs.existsSync(yearPath)) {
    fs.mkdirSync(yearPath);
  }
  while (curIndex < 2000) {
    var filename = curIndex + ".jpg";
    var url = "http://img.mmjpg.com/large/" + curYear + "/" + filename;
    var path = yearPath + "/" + filename;
    downloadArr.push({ url: url, path: path });
    curIndex += 1;
  }
  curYear += 1;
}
// 串行执行
Promise.mapSeries(downloadArr, item => downloadFile(item.url, item.path)).then(
  () => {
    console.log("全部任务执行完成后打印提示内容");
  }
);

使用命令行运行代码

cmd运行爬图命令.jpg