프로젝트/[개인] 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)*/
전체 코드 중 정규식을 적용한 크롤링, 파싱 처리 부분은 다음과 같다.
// 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
반응형