프로젝트/잡스캐너

채용 공고 수집하기

성장에 몰입중인 개발자 2022. 8. 28. 21:57

취업준비생으로서 자소설닷컴에서 채용 공고를 많이 찾아본다. 또한 개발자 취업준비생으로서 개발자 채용 공고를 올려주는 안산학생 공고 오픈카톡방에서도 공고를 확인한다.

 

(아직 실력이 많이 부족하지만 태도만은) 개발자로서 여러 채용 플랫폼의 채용 공고를 모아볼 수 없을까 궁금했다. 자소설닷컴은 대기업 위주에 기술스택 확인이 안돼서 일일이 공고를 열어봐야했고, 안산학생 공고 오픈카톡방은 사람이 일일이 하나씩 공고를 올려주는 건데 아무래도 카톡으로 봐야하니 불편하고 자동화하면 편할 것 같았다.

 

세상에 완전히 새로운 것은 없다고 하던가. 찾아보니 무려 구글에서 여러 채용 플랫폼과 제휴를 맺고 채용 공고 검색 서비스를 제공하고 있었다. 구글에서 채용 검색하면 나온다.

 

찾아보니 Cloud Talent Solution이라고 Google Jobs와 관련된 API도 제공하고 있었다. Cloud Talent Solution API를 쓰면 채용 공고를 모을 수 있을 것 같았다.

 

하지만 역시 세상은 만만치 않다. API 문서를 아무리 찾아봐도 Cloud Talent Solution은 기업 입장에서 구글 채용 페이지에 공고를 올리는 API 였다. 그래서 구글 채용 페이지를 크롤링할 생각을 했다. 애초에 이게 가능한지 확인해보기 위해 구글 채용 페이지를 크롤링한 경우가 있나 찾아봤는데 있었다! SerpApi라는 미국 API 서비스 회사다.

 

어떻게 크롤링 한 건지 Google Jobs API를 사용하고 분석해봤다. "개발자"라고 키워드를 넘기면 구글 채용에서 검색한 결과를 아래 사진과 같이 크롤링해서 넘겨준다.

 

그런데 항목에서 공고랑 연결된 링크를 확인할 수 없었고, 공고의 job_id로 API를 한 번 더 호출해야 링크를 받을 수 있게 만들어져 있었다. 아마 유료 서비스인 API 호출 횟수를 늘리기 위해서 이렇게 설계한 것 같다.

 

job_id로 URL를 만들어 링크 부분을 다시 크롤링해오는 방식일 것 같아서 구글 채용 URL 구조를 분석해봤다.
https://www.google.com/search?

q=%EA%B0%9C%EB%B0%9C%EC%9E%90+%EC%B1%84%EC%9A%A9 &newwindow=1 &authuser=0 &sxsrf=ALiCzsYfodPHdA2mUfPsCfGqlTuE23WtFQ:1657685031197 &source=hp&ei=J0TOYojPCdWJ-QajubXADQ &iflsig=AJiK0e8AAAAAYs5SN332bi8N5wC18F8IFWd0SEqP0S92 &uact=5 &oq=%EA%B0%9C%EB%B0%9C%EC%9E%90+%EC%B1%84%EC%9A%A9 &gs_lcp=Cgdnd3Mtd2l6EAM6BAgjECc6CwgAEIAEELEDEIMBOhEILhCABBCxAxCDARDHARDRAzoICAAQgAQQsQNQAFjeDWCAEWgBcAB4AoABpgKIAdoRkgEGMC4xMC4zmAEAoAEB &sclient=gws-wiz &ibp=htl;jobs&sa=X&ved=2ahUKEwiqvpf9_fT4AhX0mVYBHf8FCpsQudcGKAJ6BAgJECg#htivrt=jobs &htidocid=r4NqY1PC4eMAAAAAAAAAAA%3D%3D &fpstate=tldetail

q=부분에는 검색어가 들어가고 왼쪽 공고들의 목록을 바꾼다.

 

&htidocid=부분이 오른쪽 공고의 상세 정보를 나타낸다. 따라서 &htidocid=부분을 아무렇게나 입력하거나 없애면 오른쪽 공고가 뜨지 않는다.

 

반대로 &htidocit=부분만 제대로 입력되어 있으면 q=부분에서 쿼리문을 아무렇게나 입력해 공고들이 검색되지 않아도 오른쪽 공고의 상세 정보는 남아있다. q=부분이 아예 없다면 구글 홈페이지로 redriect된다.

 

그렇다면 &htidocid=에서 어떤 부분이 각 공고를 식별하는 유니크한 부분일까 살펴봤다. 아래의 두 공고는 이 부분이 달랐다.
&htidocid=r4NqY1PC4eMAAAAAAAAAAA%3D%3D

&htidocid=0c9Hs1AWm2QAAAAAAAAAAA%3D%3D

 

&htidocid=의 앞의 11자리가 각 공고를 식별하는 유니크한 부분이다. 아마 SerpApi에서 이 부분을 해시처리해서 job_id로 response해주고, job_id로 공고의 링크를 알기 위해서는 한 번 더 조회하게 만든다. 해시 처리된 부분을 알 수 없으니 API를 여러번 호출하게 설계한 것 같다.

 

채용 공고를 수집하려면 구글 채용 정보를 크롤링하는 크롤러를 개발하거나, 크롤링 서비스를 사용해야되는 것 같다. 일단 크롤러를 개발하고 채용 공고 수집 부분을 개발해봐야겠다.