프로젝트/[개인] Web Crawling E-Mail Service

[개인] 워크넷 맞춤 구직 정보 이메일로 받기 #3 | 정규식 적용

DandyNow 2022. 4. 20. 15:39
728x90
반응형

| 정규식 적용

크롤링한 데이터의 "학력"에 불필요한 "\n\t\t\t\t\t\t\t\t\t\t"가 포함되어 있어서 replace()로 제거하였다. #2에서는 "\n\t\t\t\t\t\t\t\t\t\t"를 replace()의 파라미터로 복붙 하여 해결했는데, 이번에는 정규식을 적용하였다.

정규식에서 () 안의 문자열은 한 덩어리로 본다. +는 앞의 표현식이 1회 이상, *는 0회 이상 반복되는 부분과 대응한다.

/(\n)*(\t)*/

위와 같이 *만 사용하여 시도하였을 때는 [그림 1]과 같은 결과가 나왔다. 그래서 +, *를 각각 사용하여 문제를 해결할 수 있었다.

/(\n)+(\t)*/

 

[그림 1] *만 사용한 결과

 

전체 코드 중 정규식을 적용한 크롤링, 파싱 처리 부분은 다음과 같다.

// 2_crawling_worknet.js
...
// 크롤링, 파싱 처리
const parsing = async (page) => {
  const $ = cheerio.load(page);
  const jobs = [];
  const $jobList = $("tbody tr");
  $jobList.each((idx, node) => {
    const jobTitle = $(node).find(".cp-info-in:eq(0)").text().trim(); // 채용공고명
    const url =
      "https://www.work.go.kr" + $(node).find(".cp-info-in > a").attr("href"); // 채용공고 상세 보기 url
    const company = $(node).find(".cp_name:eq(0)").text().trim(); // 회사명
    const experience = $(node).find("em:eq(0)").text().trim(); // 경력
    const education = $(node)
      .find("em:eq(1)")
      .text()
      .trim()
      // .replace("\n\t\t\t\t\t\t\t\t\t\t", ""); // 학력
      .replace(/(\n)+(\t)*/, ""); // 학력(정규식 적용)
    const location = $(node).find("em:eq(2)").text().trim(); // 회사 위치

    if (jobTitle != "") {
      jobs.push({
        jobTitle,
        url,
        company,
        experience,
        education,
        location,
      });
    }
  });
  ...
728x90
반응형