Dandy Now!
  • [개인] 워크넷 맞춤 구직 정보 이메일로 받기 #3 | 정규식 적용
    2022년 04월 20일 15시 39분 43초에 업로드 된 글입니다.
    작성자: DandyNow
    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
    반응형
    댓글