jsoup, HTML Parser example
jsoup HTML Parser 사용 예
jsoup는 자바 라이브러리이며 웹페이지나 HTML 문자열을 받아서 DOM 오브젝트로 사용할 수 있도록 변환해주는 기능을 한다
HTML 파일이나 웹사이트 URL, 혹은 문자열을 읽어 들여서 DOM 객체를 이용하여 내용을 간편하게 가져올 수 있는 기능을 제공한다
특히 select() 메소드는 CSS Query 를 이용하여 특정 태그를 찾아내기 때문에 CSS, jQuery 등을 사용해본적이 있으면 새로 익혀야할 사용법은 거의 없는 것 같다.
Download http://jsoup.org/download
여기저기 사이트로부터 가져온 사용법 예
// Connect to the web site
Document document = Jsoup.connect(url).get();
// Get the html document title
title = document.title();
// Connect to the web site
Document document = Jsoup.connect(url).get();
// Using Elements to get the Meta data
Elements description = document.select("meta[name=description]");
// Locate the content attribute
desc = description.attr("content");
// Connect to the web site
Document document = Jsoup.connect(url).get();
// Using Elements to get the class data
Elements img = document.select("h1[class=image-logo] img[src]");
// Locate the src attribute
String imgSrc = img.attr("src");
// Download image from URL
InputStream input = new java.net.URL(imgSrc).openStream();
// Decode Bitmap
bitmap = BitmapFactory.decodeStream(input);
Document doc = Jsoup.connect(URL).get();
Elements topicList = doc.select("h2.topic"); // h2 태그의 class 속성이 'topic' 인 것
Document doc = Jsoup.connect(url).get();
Elements links = doc.select("a[href]");
Elements media = doc.select("[src]");
Elements imports = doc.select("link[href]");
for (Element src : media)
{
if (src.tagName().equals("img"))
{
System.out.printf(" * %s: <%s> %sx%s (%s)",
src.tagName(), src.attr("abs:src"), src.attr("width"),
src.attr("height"), trim(src.attr("alt"), 20));
}
else
System.out.printf(" * %s: <%s>", src.tagName(), src.attr("abs:src"));
}
for (Element link : imports)
{
System.out.printf(" * %s <%s> (%s)", link.tagName(),link.attr("abs:href"), link.attr("rel"));
}
다음은 위의 jsoup 사용법들을 참고하여 작성해본 테스트 예제입니다
특정 페이지에 접근하여 링크 URL을 가져와서 출력하는 jsoup 예
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class JsoupTest
{
public static void main(String[] args) throws IOException
{
Document doc = Jsoup.connect("http://blog.naver.com/maccamp").get();
//System.out.printf(doc.toString());
Elements elems = doc.select("frame[src]"); //CSS 셀렉터
for(Element elem : elems)
{
//String txt = elem.text();
//String html = elem.html();
String src = elem.attr("abs:src"); //절대경로로 변경하여 리턴
doc = Jsoup.connect(src).get();
Elements elems2 = doc.select("a[href]");
for(Element e : elems2)
{
System.out.println(e.attr("abs:href"));
}
//System.out.printf("%s\n", doc.toString());
}
}
}
로컬 시스템에서 HTML, JSP를 사용하여 테스트한 예제
import java.io.IOException;
import org.jsoup.*;
import org.jsoup.nodes.*;
import org.jsoup.select.*;
public class JsoupTest
{
public static void main(String[] args) throws IOException
{
Document doc = Jsoup.connect("http://localhost:8888/jsoup/index.html").get();
Elements elems = doc.select("a");
for(Element ele : elems)
{
String link = ele.attr("abs:href");
if(link.indexOf("12345")!=-1)
{
Document doc2 = Jsoup.connect(link).get();
String txt = doc2.text();
String html = doc2.html();
String str = doc2.toString();
System.out.println(txt);
System.out.println("---------------------");
System.out.println(html);
System.out.println("---------------------");
System.out.println(str);
System.out.println("---------------------");
}
}
elems = doc.select("script");
for(Element ele : elems)
{
String txt = ele.text();
String html = ele.html();
String str = ele.toString();
System.out.println(txt);
System.out.println("---------------------");
System.out.println(html);
System.out.println("---------------------");
System.out.println(str);
System.out.println("---------------------");
}
}
}