본문 바로가기
공부/인공지능

커리어넷 대학정보 크롤링하기 (feat. Python Selenium)

by 혼밥맨 2020. 12. 30.
반응형

커리어넷 대학정보 크롤링하기 (feat. Python Selenium)

 

커리어넷 대학정보를 보면 

출처: www.career.go.kr/cnet/front/base/school/schoolUniversityList.do 

 

커리어넷_학교정보

커리어넷 학교정보 페이지에 나와있는 테이블 크롤링할 것입니다.

Google Colaboratory에서 진행했습니다.

 

# Installing Libraries

# installing libraries

# Importing Libraries

# importing libraries

# Setting a Driver to Access to the Website

# Setting a Driver to Access to the Website

# Finding a Table Tag

# Finding a Table Tag

 

# Finding a Table Tag

정직하게 table tag를 찾을 수 있습니다. 테이블 태그를 BeautifulSoup를 이용해서 잡아와봅시다.

 

 

T A B L E
<table>
<caption>번호, 학교명, 학교종류, 학교유형, 설립, 지역으로 이루어진 대학교 검색 결과</caption>
<colgroup>
<col style="width:10%"/>
<col style="width:30%"/>
<col style="width:15%"/>
<col style="width:15%"/>
<col style="width:15%"/>
<col style="width:15%"/>
</colgroup>
<thead>
<tr>
<th class="first" scope="col">번호</th>
<th scope="col">학교명</th>
<th scope="col">학교종류</th>
<th scope="col">학교유형</th>
<th scope="col">설립</th>
<th class="last" scope="col">지역</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tc">429</td>
<td>
<a href="http://www.ict.ac.kr" target="_blank" title="새 창 열림">ICT폴리텍대학(본교)</a></td>
<td class="tc">전문대학</td>
<td class="tc">전문대학</td>
<td class="tc">사립</td>
<td class="tc">경기도</td>
</tr>
<tr>
<td class="tc">428</td>
<td>
<a href="http://kfu.kdb.co.kr" target="_blank" title="새 창 열림">KDB금융대학교(본교)</a></td>
<td class="tc">대학(4년제)</td>
<td class="tc">일반대학</td>
<td class="tc">사립</td>
<td class="tc">서울특별시</td>
</tr>
<tr>
<td class="tc">427</td>
<td>
<a href="" target="_blank" title="새 창 열림">LH토지주택대학교(본교)</a>LH토지주택대학교(본교)</td>
<td class="tc">대학(4년제)</td>
<td class="tc">일반대학</td>
<td class="tc">사립</td>
<td class="tc">대전광역시</td>
</tr>
<tr>
<td class="tc">426</td>
<td>
<a href="" target="_blank" title="새 창 열림">SPC식품과학대학(본교)</a>SPC식품과학대학(본교)</td>
<td class="tc">전문대학</td>
<td class="tc">일반대학</td>
<td class="tc">사립</td>
<td class="tc">서울특별시</td>
</tr>
<tr>
<td class="tc">425</td>
<td>
<a href="http://www.kaya.ac.kr" target="_blank" title="새 창 열림">가야대학교</a></td>
<td class="tc"></td>
<td class="tc"></td>
<td class="tc"></td>
<td class="tc"></td>
</tr>
<tr>
<td class="tc">424</td>
<td>
<a href="http://www.kaya.ac.kr" target="_blank" title="새 창 열림">가야대학교(김해캠퍼스)</a></td>
<td class="tc">대학(4년제)</td>
<td class="tc">일반대학</td>
<td class="tc">사립</td>
<td class="tc">경상남도</td>
</tr>
<tr>
<td class="tc">423</td>
<td>
<a href="http://www.gachon.ac.kr" target="_blank" title="새 창 열림">가천대학교(글로벌캠퍼스)</a></td>
<td class="tc">대학(4년제)</td>
<td class="tc">일반대학</td>
<td class="tc">사립</td>
<td class="tc">경기도</td>
</tr>
<tr>
<td class="tc">422</td>
<td>
<a href="http://www.cku.ac.kr" target="_blank" title="새 창 열림">가톨릭관동대학교(본교)</a></td>
<td class="tc">대학(4년제)</td>
<td class="tc">일반대학</td>
<td class="tc">사립</td>
<td class="tc">강원도</td>
</tr>
<tr>
<td class="tc">421</td>
<td>
<a href="http://catholic.ac.kr" target="_blank" title="새 창 열림">가톨릭대학교(성의교정)</a></td>
<td class="tc">대학(4년제)</td>
<td class="tc">일반대학</td>
<td class="tc">사립</td>
<td class="tc">서울특별시</td>
</tr>
<tr>
<td class="tc">420</td>
<td>
<a href="http://songeui.catholic.ac.kr" target="_blank" title="새 창 열림">가톨릭대학교(성신교정)</a></td>
<td class="tc">대학(4년제)</td>
<td class="tc">일반대학</td>
<td class="tc">사립</td>
<td class="tc">서울특별시</td>
</tr>
</tbody>
</table>

Table 자체를 출력하니 너무 더럽습니다. 깔끔하게 대학에 대한 정보만 보고 싶은데 말이죠.

 

# Diving into Details

T D S
[<td class="tc">429</td>, <td>
<a href="http://www.ict.ac.kr" target="_blank" title="새 창 열림">ICT폴리텍대학(본교)</a></td>, <td class="tc">전문대학</td>, <td class="tc">전문대학</td>, <td class="tc">사립</td>, <td class="tc">경기도</td>, <td class="tc">428</td>, <td>
<a href="http://kfu.kdb.co.kr" target="_blank" title="새 창 열림">KDB금융대학교(본교)</a></td>, <td class="tc">대학(4년제)</td>, <td class="tc">일반대학</td>, <td class="tc">사립</td>, <td class="tc">서울특별시</td>, <td class="tc">427</td>, <td>
<a href="" target="_blank" title="새 창 열림">LH토지주택대학교(본교)</a>LH토지주택대학교(본교)</td>, <td class="tc">대학(4년제)</td>, <td class="tc">일반대학</td>, <td class="tc">사립</td>, <td class="tc">대전광역시</td>, <td class="tc">426</td>, <td>
<a href="" target="_blank" title="새 창 열림">SPC식품과학대학(본교)</a>SPC식품과학대학(본교)</td>, <td class="tc">전문대학</td>, <td class="tc">일반대학</td>, <td class="tc">사립</td>, <td class="tc">서울특별시</td>, <td class="tc">425</td>, <td>
<a href="http://www.kaya.ac.kr" target="_blank" title="새 창 열림">가야대학교</a></td>, <td class="tc"></td>, <td class="tc"></td>, <td class="tc"></td>, <td class="tc"></td>, <td class="tc">424</td>, <td>
<a href="http://www.kaya.ac.kr" target="_blank" title="새 창 열림">가야대학교(김해캠퍼스)</a></td>, <td class="tc">대학(4년제)</td>, <td class="tc">일반대학</td>, <td class="tc">사립</td>, <td class="tc">경상남도</td>, <td class="tc">423</td>, <td>
<a href="http://www.gachon.ac.kr" target="_blank" title="새 창 열림">가천대학교(글로벌캠퍼스)</a></td>, <td class="tc">대학(4년제)</td>, <td class="tc">일반대학</td>, <td class="tc">사립</td>, <td class="tc">경기도</td>, <td class="tc">422</td>, <td>
<a href="http://www.cku.ac.kr" target="_blank" title="새 창 열림">가톨릭관동대학교(본교)</a></td>, <td class="tc">대학(4년제)</td>, <td class="tc">일반대학</td>, <td class="tc">사립</td>, <td class="tc">강원도</td>, <td class="tc">421</td>, <td>
<a href="http://catholic.ac.kr" target="_blank" title="새 창 열림">가톨릭대학교(성의교정)</a></td>, <td class="tc">대학(4년제)</td>, <td class="tc">일반대학</td>, <td class="tc">사립</td>, <td class="tc">서울특별시</td>, <td class="tc">420</td>, <td>
<a href="http://songeui.catholic.ac.kr" target="_blank" title="새 창 열림">가톨릭대학교(성신교정)</a></td>, <td class="tc">대학(4년제)</td>, <td class="tc">일반대학</td>, <td class="tc">사립</td>, <td class="tc">서울특별시</td>]

 아직까지도 너무 더럽습니다. 텍스트만 볼 수 있도록 해봅시다. 

# .text.strip( )

# .text.strip()

 

이제 텍스트만 깔끔하게 잘 출력됩니다!

429
ICT폴리텍대학(본교)
전문대학
전문대학
사립
경기도
428
KDB금융대학교(본교)
대학(4년제)
일반대학
사립
서울특별시
427
LH토지주택대학교(본교)LH토지주택대학교(본교)
대학(4년제)
일반대학
사립
대전광역시
426
SPC식품과학대학(본교)SPC식품과학대학(본교)
전문대학
일반대학
사립
서울특별시
425
가야대학교




424
가야대학교(김해캠퍼스)
대학(4년제)
일반대학
사립
경상남도
423
가천대학교(글로벌캠퍼스)
대학(4년제)
일반대학
사립
경기도
422
가톨릭관동대학교(본교)
대학(4년제)
일반대학
사립
강원도
421
가톨릭대학교(성의교정)
대학(4년제)
일반대학
사립
서울특별시
420
가톨릭대학교(성신교정)
대학(4년제)
일반대학
사립
서울특별시

 

근데 대학교가 429곳인데 왜 10개만 크롤링 됐을까요?

 

다음 버튼을 누르고 다음 페이지에 리스트된 대학 정보를 크롤링 해야 하는 데요. 다음 버튼의 tag를 찾아봅시다.

바로 찾아버렸습니다. 이제 이 이미지를 클릭하는 코드를 작성해봅시다. 이제 '다음' 버튼을 클릭해서 계속해서 크롤링을 진행해봅시다.

흠.. 다음 버튼을 눌러도 도메인이 변하지 않았습니다. 아무래도 커리어넷에서 보안 차원으로 도메인 공개를 하지 않는 것 같습니다. 어찌 됐든 다음 페이지에서 똑같은 방법으로 테이블을 찾아서 크롤링을 진행해야 해요.

 

 

분명히 다음 페이지로 이동했다고 생각했는데 드라이버가 여전히 같은 도메인에 위치하고 있습니다 ...

흠 그러면 이미지가 아니라 a tag를 선택해서 클릭하는 코드를 작성해서 다시 시도해봅시다.

 

# Finding the 'a Tag'

'a Tag'를 찾아서 클릭하는 것까지 코드를 작성했다고 생각했는데 ... 에러가 발생했습니다.. 에러 내용을 봐야겠지요. 

NoSuchElementException 예외오류가 발생했습니다.. 태그를 바꿔 봐야겠어요.

또 에러.. 그렇다면 다시

계속해서 똑같은 에러가 발생하네요.. 

왜 엘리먼트가 없다고 하는지 모르겠습니다. ㅜㅜ 

 

# Problem

문제점

1. 커리어넷 도메인은 보안 문제로 한 개의 도메인만 노출되고 있다. (모든 페이지마다 도메인이 노출되면 크롤링 난이도가 훨씬 쉬워지는 것 같습니다)

2. 엘리먼트가 자꾸 없다고 한다. 

 

에러를 고치기 위해 계속 업데이트 할 예정이다. 혹시나 어떻게 고칠지 아시는 분 계시다면 댓글로 알려주세요ㅜㅜ

 

<업데이트 내용>

1. (20.12.30) BeautifulSoup4는 a[href]를 잘 찾는데, selenium는 hyperlink가 있는 a tag를 못 찾는다고 나온다.

반응형

댓글