개요
jsoup 라이브러리를 이용한 안드로이드에서의 웹파싱
목적
우리는 한번 쯤은 인터넷을 '정보의 바다'라고 비유하는 표현을 들어본 적이 있습니다.
그 말은 명백한 사실입니다. 경험을 통해 아시겠지만 우리는 평소 필요한 정보들을 인터넷을 통해 얻기 때문입니다.
더욱 구체적으로 말하면 이러한 정보는 보통 검색 포털이나, 블로그 등
WWW(월드 와이드 웹)을 기초로하여 HTML을 이용하여 정보를 제공받습니다.
만약 우리는 인터넷에서 HTML을 이용한 데이터를 다룰수 있는 방법을 알게 된다면 그것은 크나큰 장점이 됩니다.
오늘은 이러한 목적을 기반으로 하여 안드로이드에서 원하는 데이터를 파싱하는 방법을 포스팅하고자 합니다.
실습
연합뉴스 홈페이지를 보면 무수히 많은 데이터와 기사를 갖고있습니다.
허나 만약 우리가 필요한 데이터만 추출하여 확인한다면 더욱 깔끔한 형태의 정보를 얻을 수 있을거라 판단됩니다.
위와같은 홈페이지에서 추출할 내용은
위와같이 빨간 네모박스안의 내용을 추출하여 안드로이드로 보여주겠습니다.
방법
먼저 우리는 jsoup라이브러리를 이용하여야 합니다.
jsoup라이브러리를 소개하면
'jsoup(제이솝)은 html, xml 등을 파싱하는 자바 라이브러리다. 원래 SOUP(솝)이라는 라이브러리인데, 자바에 맞게 다시 만들어졌으므로 J가 붙어 jsoup이 되었다. 웹사이트의 내용을 쉽게 파싱(parse)해오고 싶을 때 사용한다. 크롤링(crawl)이라는 용어를 쓰기도 한다.
jsoup 라이브러리는 mvnrepository에서 구할 수 있다. 2017년 11월 현재 가장 최신 버전은 1.10.2 버전이다.'
즉, jsoup이라는 라이브러리는 자바를 기반으로 만들어진 웹문서의 정보를 추출하여 주는 도구라고 생각하면 됩니다.
jsoup을 이용하기에 앞서 jsoup을 설치해야 합니다.
다운로드 링크 : http://jsoup.org/download
위의 링크에 접속하여 가장상단에 있는 jsoup-1.10.3.jar파일을 설치하여 줍니다.
그 후
사용하고자 하는 안드로이드 프로젝트 경로에 접속하여 libs 디렉토리를 찾은 후
그 안에 다운로드한 jsoup-1.10.3.jar파일을 복사하여 줍니다.
.jar파일을 성공적으로 디렉토리에 복사한 후에는
안드로이드 스튜디오에서
위와 같이 프로젝트의 구소를 보는 방식을 'Project'로 지정하여 준후
추가된 jar파일의 마우스 오른쪽 클릭을 하여 'Add As Library'를 클릭하여 줍니다.
이제 안드로이드에서 jsoup사용을 위한 준비는 모두 마쳤습니다.
jsoup라이브러리는 인터넷을 통한 웹접속을 필요로 하기에
인터넷 관련 퍼미션이 필요합니다.
AndroidManifes.xml 창을 열어
상단에
<uses-permission android:name="android.permission.INTERNET" />
추가합니다.
그후
레이아웃을 설정하여 줍니다.
레이아웃에는 파싱한 신문기사를 보여줄 텍스트 뷰 하나와, 데이터를 가져오는 기능을 하는 버튼을 하나 만듭니다.
activity_main.xml
다음은 기능에 맞게 자바코드를 수정하여 줍니다.
MainActivity.java
여기서
눈여겨 봐야할 코드는
//테스트1
Elements titles= doc.select("div.news-con h1.tit-news");
System.out.println("-------------------------------------------------------------");
for(Element e: titles){
System.out.println("title: " + e.text());
htmlContentInStringFormat += e.text().trim() + "\n";
}
//테스트2
titles= doc.select("div.news-con h2.tit-news");
System.out.println("-------------------------------------------------------------");
for(Element e: titles){
System.out.println("title: " + e.text());
htmlContentInStringFormat += e.text().trim() + "\n";
}
//테스트3
titles= doc.select("li.section02 div.con h2.news-tl");
System.out.println("-------------------------------------------------------------");
for(Element e: titles){
System.out.println("title: " + e.text());
htmlContentInStringFormat += e.text().trim() + "\n";
}System.out.println("-------------------------------------------------------------");
원하는 데이터를 추출하는 방법입니다.
doc.select("html의 속성");
위와 같은 방법으로 원하는 데이터만을 뽑아올 수 있습니다.
시연