Posts DEVIL: 사람인 채용공고 크롤링
Post
Cancel

DEVIL: 사람인 채용공고 크롤링

기능 추가

  • 사람인 사이트의 개발자 채용공고를 크롤링하였다.
  • 웹 문서의 HTML 요소를 객체화하여 원하는 데이터를 선택할 수 있게 만들어주는 Jsoup 라이브러리를 사용하였다.
  • 개발자로 검색하였을 때의 주소에 있는 pageCount 값은 검색된 채용공고 게시글 수를 뜻한다.
  • 사용자가 숫자를 입력하면 해당 숫자만큼의 채용공고를 크롤링해와 DBMS에 자동으로 저장하도록 만들었다.

개선 필요

  • 현재는 실제 채용공고 상세보기 페이지의 정보가 아니라, 채용공고 목록 페이지에 노출된 정보에만 접근할 수 있다. 따라서 채용공고의 내용 대신 URL만을 가져오게 만들었다.
  • 목록 페이지가 아니라 실제 게시글 상세보기 페이지를 크롤링할 필요가 있다.
  • 이를 위해서는 우선 목록 페이지를 통해 게시글의 주소를 알아내 자료구조에 담은 후, 반복문을 돌며 주소에 해당하는 페이지에 접근하여 정보를 가져와야 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public class CrawlRecruitCommand implements Command{

  ArticleDao articleDao;

  public CrawlRecruitCommand(ArticleDao articleDao) {
    this.articleDao = articleDao;
  }

  @Override
  public void execute(Map<String,Object> context) {
    System.out.println("[채용공고 등록]");
    int no = Prompt.inputInt("사람인으로부터 몇 개의 채용공고를 가져오시겠습니까?");
    try {
      String URL = "<http://www.saramin.co.kr/zf_user/search/recruit?search_area=main&search_done=y&search_optional_item=n&searchType=default_mysearch&searchword=%EA%B0%9C%EB%B0%9C%EC%9E%90&recruitPage=2&recruitSort=relation&recruitPageCount=>" 
          + no 
          + "&inner_com_type=&company_cd=0%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C9%2C10&quick_apply=&except_read=";
      org.jsoup.Connection conn = Jsoup.connect(URL);
      Document doc = conn.get();
      //Element jobs = doc.select();
      Elements titles = doc.select("h2.job_tit a");
      Elements dates = doc.select("div.job_date span.date");
      //Elements companyName = doc.select("strong.corp_name a");
      titles.attr("title");
      System.out.println(titles.size());
      
      for (int i = 0; i < no; i++) {
        Article article = new Article();
        article.setNo(i + 1);
        article.setTitle(titles.get(i).attr("title"));
        article.setWriter(2);
        article.setEndDate(parseDate(dates.get(i).text()));
        article.setContent("<http://www.saramin.co.kr>" + titles.get(i).attr("href"));
        article.setCategoryNo(3);
        //article.setCompany(companyName.get(i).attr("title"));
        articleDao.insert(article);
      }
      System.out.println("크롤링이 끝났습니다! 입력된 데이터 개수:" + no);

    } catch(Exception e) {
      e.printStackTrace();
    }
    
  }
  
  public String parseDate(String rawDate) {
    if (!rawDate.split(" ")[0].equals("~")) {
      return "1996-09-02";
    }
    return "2020-" + rawDate.split(" ")[1].split("\\\\(")[0].replace("/", "-");
  }
}
This post is licensed under CC BY 4.0 by the author.

코어 자바스크립트 #5 자료구조와 자료형: Object.keys, values, entries

DEVIL: 프로그래머스 채용공고 크롤링

Loading comments from Disqus ...