Cheerio 모듈로 redis.io 페이지 파싱해보기

Created:

레디스의 명령어가 무엇이 있는지 파악해 보고자 레디스 명령어목록 페이지(https://redis.io/commands)를 Cheerio 모듈로 긁어와보는 작업을 하였다.

프로젝트 생성및 초기세팅

레디스 페이지의 html정보를 가져오기 위하여 request, request-promise 모듈을 사용하였고 가져온 html데이터를 파싱하기 위해 cheerio 모듈을 사용하였다.

먼저 적당한 디렉토리를 생성후 npm init으로 프로젝트를 생성해준다.

npm init

이때 package name, version등 초기세팅 정보를 물어오는데 아무것도 입력안하고 넘어가면 default값으로 생성된다.
프로젝트가 생성이 완료되면 디렉토리내에 package.json파일이 생성된것을 확인 할 수 있다.

이어서 필요한 모듈들을 설치한다. 마찬가지로 디렉토리 내에서 아래 명령어로 모듈 3개를 설치해준다.

npm install request
npm install request-promise
npm install cheerio

제대로 설치가 되었다면 package.json 파일 내의 dependencies 항목에 request, request-promise, cheerio가 설치 된것을 확인 할 수 있을것이다.

{
  ...
  "dependencies": {
    "cheerio": "^1.0.0-rc.3",
    "request": "^2.88.0",
    "request-promise": "^4.2.5"
  }
}

코드추가

레디스 페이지에서 명령어 목록을 긁어오기 위한 로직을 추가 하고자한다. 프로젝트 디렉토리내에 javascript파일을 생성한다. 예제에서는 test-redis-commands-parse.js로 생성하였다.
생성완료후 파일내에 아래 코드를 입력해준다.

const cheerio = require("cheerio");
const requestPromise = require("request-promise");

(async function() {
  const document = await getDocument(); // (1)
  const $ = cheerio.load(document);  // (2)
  const commands = $(".container ul li"); // (3)

  for (let i = 0; i < commands.length; i++) {
    const cmd = commands[i];

    // (4)
    /**
     * 명령어
     */
    const command = $(".command", cmd)
      .html()
      .trim()
      .replace(/^\s+.+/gm, "")
      .trim();

    // (5)
    /**
     * 명령어에 필요한 아규먼트
     */
    const args = $(".command .args", cmd)
      .text()
      .trim()
      .replace(/\s+/g, " ");

    // (6)
    /**
     *  명령어의 간략한 설명
     */
    const summary = $(".summary", cmd)
      .text()
      .trim();

    // (7)
    /**
     * 명령어, 아규먼트, 명령어 설명 출력
     */
    console.log(command + "," + args + "," + summary);
  }
})();

/**
 * 레디스 명령어목록 페이지 html 정보를 가져온다.
 */
async function getDocument() {
  const options = Object.assign({
    method: "GET",
    uri: "https://redis.io/commands"
  });
  return await requestPromise(options);
}

(1): request-promise 모듈을 통해 https://redis.io/commands 페이지의 html데이터를 가져왔다.
(2): html데이터를 가공하기위해 cheerio 모듈에 로드시킨다.
(3): 페이지 전체 데이터중 필요한 실제 명령어 목록에 접근하기 위해 태그를 타고 들어갔다.
(4): 명령어 텍스트를 가져온다.
(5): 명령어에 필요한 아규먼트를 가져온다.
(6): 명령어의 간략한 설명 정보를 가져온다.
(7): 위에서 가져온 3개의 데이터를 묶어서 출력했다.

실행결과

실행해보자. 실행명령어는 node ${파일명}이다. 예제에서는 프로젝트 디렉토리내의 bin 디렉토리내에 test-redis-commands-parse.js로 작성했으므로 아래와 같이 실행했다.

node ./bin/test-redis-commands-parse.js

제대로 가져왔다면 콘솔에 레디스 명령어 목록이 출력된것을 확인 할 수 있다.

APPEND,key value,Append a value to a key
AUTH,password,Authenticate to the server
...
LATENCY RESET,[event],Reset latency data for one or more events.
LATENCY HELP,,Show helpful text about the different subcommands.

출력된 내용을 복사해다가 .csv 확장자로 별도 저장한뒤에 엑셀로 불러올 수도 있다.

예제

https://github.com/ryeon9445/javascript-test#redis-commands-parse

Comments