관리 메뉴

웹개발자의 기지개

Jsoup 으로 웹페이지 소스 파싱1 (최근 로또 당첨번호 확인) 본문

Java

Jsoup 으로 웹페이지 소스 파싱1 (최근 로또 당첨번호 확인)

http://portfolio.wonpaper.net 2019. 6. 27. 16:50

특정 웹사이트의 전체 소스내용들을 특정 부분만 추출하여 파싱하고자 할때, 

Jsoup 라이브러리 소스가 있었다.

소스를 일단 다운 받자.

https://jsoup.org/download

 

Download and install jsoup

Download and install jsoup jsoup is available as a downloadable .jar java library. The current release version is 1.12.1. What's new See the 1.12.1 release announcement for the latest changes, or the changelog for the full history. Previous releases of jso

jsoup.org

그 다음, 

이클립스에 외부 jar 파일을 추가 시키자

현재 JavaJsoupTest 프로젝트에서 마우스 우클릭후 아래 그림처럼  따라하자.

jsoup.jar 외부 라이이브러리 추가

 

해당 소스를 추출할 로또사이트의 웹소스보기로 확인해 보자.

우측 글씨가 잘안 보인다 TT;;

해당 소스만 뽑아 봤다.

위에서 id 값으로 drwtno1부터 6까지 그리고, 보너스 번호 id값 bnusNo 이다.

그리고,  몇회 로또 당첨번호인지도 소스로 확인해 두자.

id값은 lottoDrwNo 이다.

 

 

이제 추출 동작을 위해 

LottoNum,java 파일(실제 Jsoup 동작소스) 과 JsoupTest.java 파일 (실제 main함수가 있는 실행소스)  을 구분하여 만들어 보자.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
 
public class LottoNum {
    public LottoNum() {    
        getNumber();
    }    
    public void getNumber() {
        try {
            Document doc = Jsoup.connect("https://www.nlotto.co.kr/common.do?method=main").get();
            //System.out.println(doc);
            Elements contents ;
            contents = doc.select("#lottoDrwNo");
            System.out.println("[ "+ contents.text() +" 회 로또 당첨번호]\n");
            
            for (int i=1;i<=6;i++) {
                contents = doc.select("#drwtNo" + i);
                System.out.println(i+ "번 : " + contents.text());
            }
                contents = doc.select("#bnusNo");
                System.out.println("보너스번호 : " + contents.text());
            
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
cs

LottoNum.java 안에 보면 Jsoup.connect 해서 로또 웹사이트 주소로 연결하고 

15번줄에 doc.select("#lottoDrw") 해서 #id 값하면 select 함수로 해당 부분을 추출할 수 있다. 그리고 .text() 함수로 바로 내용을 뽑는다.

 

1
2
3
4
5
6
7
8
9
10
public class JsoupTest {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        LottoNum lotto = new LottoNum();
    
        
    }
 
}
cs

 

 

참고사이트 : 근둥이님의 포스팅글

m.blog.naver.com/lghlove0509/220963952487

 

 

[ 추가 부연 ]

 

무슨연유인지 몇일전에 잘돌아가던 Jsoup 1.12.1 jar 라이브러리 요놈이

소스는는 위 그대로인데,

 

java.io.IOException: Mark invalid

 

이런식으로 try  catch 문에 계속 걸리면서 중지 되었다.

구글링 하여 찾아보니, 영문 포스팅 글중에  버전을 아래로 낮추 마이그레이션 버전을 설치하라는 거였다.

 

jsoup-1.10.3.jar
0.34MB

 

기존의 1.12.1 버전을 삭제하고, 위의 jsoup 1.10.3 버전파일을 새로 jar파일을 추가하고 빌드추가하니

깨끗하게 잘돌아갔다.

 

이야 신기신기 ~~~

Comments