방명록
- [개인] 워크넷 맞춤 구직 정보 이메일로 받기 #1 | axios, cheerio 이용한 웹 크롤링2022년 04월 14일 23시 29분 00초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
| 개발 동기 및 내용
매번 워크넷에 들어가 비슷한 검색어를 입력하는 것이 번거로웠다. 스케줄링까지 적용해 매일 정해진 시간에 자동으로 이메일 구직 정보를 받아보는 프로그램을 만들고자 한다.
| 사용 기술
node.js와 axios, cheerio 모듈을 사용했다.
| 진행 현황
현재까지 구현한 기능은 "검색어(keyword), 검색 결과 수(resultCnt, 최대 검색 건수 기본값 10), 지역코드(regionNumber)"를 매개변수로 주면 "채용공고명, 회사명, 채용 공고 상세 페이지 url"을 크롤링하는 것이다.
| 다음 단계
크롤링된 정보를 gmail로 보내는 기능을 구현할 것이다.
| 작성 코드
const axios = require("axios"); const cheerio = require("cheerio"); // 크롤링 대상 const getHTML = async (keyword, resultCnt, regionNumber) => { try { const html = ( // getJobs()을 호출할 때 워크넷 url은 "검색어(encodeURI), 검색 결과 수(resultCnt), 지역코드(regionNumber)"를 동적으로 받음 await axios.get( `https://www.work.go.kr/empInfo/empInfoSrch/list/dtlEmpSrchList.do?careerTo=&keywordJobCd=&occupation=&templateInfo=&shsyWorkSecd=&rot2WorkYn=&payGbn=&resultCnt=${resultCnt}&keywordJobCont=&cert=&cloDateStdt=&moreCon=&minPay=&codeDepth2Info=11000&isChkLocCall=&sortFieldInfo=DATE&major=&resrDutyExcYn=&eodwYn=&sortField=DATE&staArea=&sortOrderBy=DESC&keyword=${encodeURI( keyword )}&termSearchGbn=all&carrEssYns=&benefitSrchAndOr=O&disableEmpHopeGbn=&webIsOut=&actServExcYn=&maxPay=&keywordStaAreaNm=&emailApplyYn=&listCookieInfo=DTL&pageCode=&codeDepth1Info=11000&keywordEtcYn=&publDutyExcYn=&keywordJobCdSeqNo=&exJobsCd=&templateDepthNmInfo=&computerPreferential=®DateStdt=&employGbn=&empTpGbcd=®ion=${regionNumber}&infaYn=&resultCntInfo=${resultCnt}&siteClcd=all&cloDateEndt=&sortOrderByInfo=DESC&currntPageNo=1&indArea=&careerTypes=&searchOn=Y&tlmgYn=&subEmpHopeYn=&academicGbn=&templateDepthNoInfo=&foriegn=&mealOfferClcd=&station=&moerButtonYn=&holidayGbn=&enterPriseGbn=all&academicGbnoEdu=noEdu&cloTermSearchGbn=all&keywordWantedTitle=&stationNm=&benefitGbn=&keywordFlag=&essCertChk=&isEmptyHeader=&depth2SelCode=&_csrf=afefc5c3-fc99-440b-9f6d-563efe24d151&keywordBusiNm=&preferentialGbn=&rot3WorkYn=&pfMatterPreferential=®DateEndt=&staAreaLineInfo1=11000&staAreaLineInfo2=1&pageIndex=1&termContractMmcnt=&careerFrom=&laborHrShortYn=#viewSPL` ) ).data; return html; } catch (e) { console.log(e); } }; // 크롤링, 파싱 처리 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(); // 회사명 if ( jobTitle != "" ) { jobs.push({ jobTitle, company, url, }); } }); console.log(jobs.length); // 총 검색된 게시글 수를 콘솔창에서 확인 return jobs; }; // 검색어(keyword), 검색 결과 수(resultCnt, 최대 검색 건수 기본값 10), 지역코드(regionNumber) const getJobs = async (keyword, resultCnt = "10", regionNumber = "") => { const html = await getHTML(keyword, resultCnt, regionNumber); const jobs = await parsing(html); console.log(jobs); }; getJobs("javascript", 1000, 26000); // 검색어 , 최대 검색 결과 수, 지역(26000 - 부산전체)
728x90반응형'프로젝트 > [개인] Web Crawling E-Mail Service' 카테고리의 다른 글
[개인] 워크넷 맞춤 구직 정보 이메일로 받기 #3 | 정규식 적용 (0) 2022.04.20 [개인] 워크넷 맞춤 구직 정보 이메일로 받기 #2 | dotenv, nodemailer를 추가해 크롤링 정보를 개인 이메일로 발송 (0) 2022.04.15 다음글이 없습니다.이전글이 없습니다.댓글