안경잡이개발자

728x90
반응형

웹 크롤러(Web Crawler)의 개요 및 공지사항 크롤링 해보기

나동빈


※ 웹 크롤러의 개요 ※


  웹 크롤러(Web Crawler)란 자동화된 방법으로 웹(WEB)에서 다양한 정보를 수집하는 소프트웨어를 의미합니다. 예를 들어 특정한 웹 사이트에 주기적으로 올라오는 글을 실시간으로 문자로 알림해주는 서비스 등을 직접 만들고 싶을 때 사용할 수 있습니다.


  웹 크롤러가 매우 유용한 이유는 원하는 서비스로부터 원하는 정보를 편하게 얻어올 수 있기 때문입니다.


  또한 웹 크롤러는 언어를 막론하고 자신이 원하는 언어로 개발할 수 있습니다. 필자는 오래 전부터 Java를 이용해왔으나 최근 Python이 웹 크롤러 기능을 매우 강력하게 지원하는 추세라서 Python으로 강의를 준비해보았습니다.


※ 웹 크롤러 개발환경 구축하기 ※


  웹 크롤러를 개발하기 위해 기본적으로 파이썬(Python) 개발환경을 구축하셔야 합니다. 파이썬 개발환경이 구축되었다면 requests 라이브러리를 이용해 간단히 특정 URL의 HTML 소스코드를 가져오겠습니다. 타겟으로 설정한 사이트는 제 웹 사이트입니다.


  웹 사이트 URL: http://www.dowellcomputer.com/main.jsp


import requests


# 특정 URL에 접속하는 요청(Request) 객체를 생성합니다.

request = requests.get('http://www.dowellcomputer.com/main.jsp')


# 접속한 이후의 웹 사이트 소스코드를 추출합니다.

html = request.text


print(html)



  또한 웹 크롤러 개발을 위해 가장 많이 사용되는 라이브러리는 뷰티풀 수프(Beautiful Soup)입니다. 뷰티풀 수프는 특정 웹 사이트의 소스코드를 가져와 자유자재로 파싱(Parsing)하는 작업에 큰 도움을 줍니다. 저는 '최근 공지사항' 내용을 파싱하는 방법을 소개하고자 합니다.


  한 번 웹 사이트에서 마우스 우클릭 이후에 '페이지 소스 보기(V)'를 눌러서 소스코드를 살펴봅시다.



  이후에 아래와 같이 공지사항의 제목은 <td> 태그 내부의 <a> 태그로 구성되어 있는 것을 알 수 있었습니다.



  따라서 뷰티풀 수프를 이용해서 위에서 작성한 소스코드를 확장해봅시다.


import requests

from bs4 import BeautifulSoup


# 특정 URL에 접속하는 요청(Request) 객체를 생성합니다.

request = requests.get('http://www.dowellcomputer.com/main.jsp')


# 접속한 이후의 웹 사이트 소스코드를 추출합니다.

html = request.text


# HTML 소스코드를 파이썬 객체로 변환합니다.

soup = BeautifulSoup(html, 'html.parser')


# <a> 태그를 포함하는 요소를 추출합니다.

links = soup.select('td > a')


# 모든 링크에 하나씩 접근합니다.

for link in links:

    # 링크가 href 속성을 가지고 있다면

    if link.has_attr('href'):

        # href 속성의 값으로 notice라는 문자가 포함되어 있다면

        if link.get('href').find('notice') != -1:

            print(link.text)



  소스코드 실행 결과 위와 같이 2건의 공지사항 제목이 출력된 것을 알 수 있습니다.



  실제로 웹 사이트에서 보이는 '최근 공지사항' 내용과 정확히 일치합니다. 이상으로 간단한 형태의 웹 크롤러 개발 방법을 알아보았습니다.


728x90
반응형