티스토리 뷰
모바일 개발이나 각종 사이트를 처리할 때 HTML 페이지를 가져와서 분석하는 경우가 종종 있습니다.
보통 HTML 파싱할 때 정규식을 이용해서 했었는데요.
단점이 <div>태그와 같은 것이 중첩되어 있을 경우, 첫번째 </div>태그까지만 찾게 되는 것이었습니다.
아무래도 정규식 자체가 문자열 매칭이기 때문에 한계가 있는 것 같구요.
결국 DOM과 같은 구조를 사용하지 않으면 안될 것 같다는 생각이 들었습니다.
예전에 Javascript에서 쓸 수 있는 HTML Parser도 한번 소개한 적이 있기는 한데요.
오늘은 Java에서 활용할 수 있는 HTML Parser인 jsoup에 대해서 이야기 해보려고 합니다.
jsoup: Java HTML Parser
jsoup은 실제 사용하는 HTML을 처리할 수 있는 자바 라이브러리인데요.
HTML 문서를 URL이나 파일, 문자열 형태로 전달해서 파싱할 수 있구요.
DOM, CSS, JQuery와 유사한 메소드들을 사용할 수 있어서 상당히 편리합니다.
즉, DOM 탐색 구조 뿐만 아니라 문서 내부의 특정 위치를 찾을 때 CSS의 class를 기반으로도 검색이 가능한 구조이죠.
(실제 HTML 파싱할 때 정말 좋습니다.. ^^)
간단한 예제
jsoup에서 소개하고 있는 예제는 위키피디아에 접속해서 "In the news" 항목 중 Headline 부분만 가져오는 것입니다.
먼저 예제를 보시죠..
위 예제는 class가 #mp-itn인 태그 하위 목록 중에 <b> 태그 다음에 <a> 태그가 있는 Element의 리스트를 가져오라는 명령입니다.
위키피디아에 접속해서 보면 다음 부분 중에 굵은 글씨로 되어 있는 부분들만 가져오게 되는 것이죠.
즉, "World Chess Championship", "Madeline Miller" 등의 텍스트를 포함한 Element를 가져오게 되겠죠..
정말 편리한 구조로 되어 있구요. 이걸 써본 다음부터는 복잡한 정규식을 버리게 되었네요.. ^^
설치 방법
MIT 라이센스를 따르는 오픈 소스로 되어 있구요. 설치 방법은 다음과 같습니다.
소스까지 필요 없다면 jsoup-1.6.3.jar 파일을 받으시면 됩니다.
당연히 jsoup-1.6.3-javadoc.jar 파일도 받으셔서 java doc을 보시면서 프로그래밍 해야 보다 제대로 활용할 수 있을 겁니다.
그리고 다운로드한 jsoup-1.6.3.jar 파일을 lib/ 폴더에 넣으시고 개발을 하시면 됩니다.
위에서 이야기 한 대로 DOM 트리구조 탐색이나 CSS의 Selector등을 그대로 활용할 수 있으니 새롭게 배울 것은 없다고 보셔도 됩니다. ^^
활용 예제
제 블로그에 한번 간단하게 테스트 해보죠..
class="title"로 되어있는 부분을 찾아서 리스트로 가져오구요.
그리고 href로 링크가 걸려있는 부분을 찾아서 리스트로 가져오는 예제입니다.
실행 결과는 다음과 같습니다.
정말 편리한 라이브러리 인 것 같네요.
여러분도 복잡한 정규식 버리고 jsoup을 잘 활용해 보세요 ^^
HTML 파싱 및 정규식 활용 더 알아보기
순수 자바스크립트로 구성된 HTML 파서도 참고해 보세요. js 파일도 받을 수 있습니다.
HTML 태그를 제거하기 위한 정규식이 필요하면 한번 살펴보세요.
파싱 전 HTML을 가져오는 방법 중 프록시를 활용해야 할 수도 있습니다.
전화번호와 같은 숫자를 특정 형식에 맞춰서 출력하고 싶을 때 정규식을 활용해 보세요.
날짜 형식을 변경하기 위한 Java의 SimpleDateFormat 소스
날짜 포맷을 자유자재로 바꿔 쓰고 싶을 때 참고해 보세요.
Objective C에서 정규식을 적용할 수 있는 RegexKitLite가 필요할 때 보세요
'프로그래밍 > Java' 카테고리의 다른 글
Static 키워드 알고 사용하기~ (0) | 2012.07.16 |
---|---|
java에서 날짜 형식 변경을 위한 SimpleDateFormat에 대한 간략한 정리~ (4) | 2012.07.11 |
Proxy를 이용한 HTML 소스 가져오기 (0) | 2012.05.24 |
웹 페이지 레이아웃을 설정하는 SiteMesh 세팅 및 활용에 대하여~ (0) | 2012.04.27 |
프로그래밍 주석에 대한 정리 및 몇가지 팁~ (0) | 2012.04.16 |