본문 바로가기
Programando/Android

[Android/Java] 안드로이드 크롤링

먼저, 정부24의 지역 축제 정보 제공 페이지를 통해 안드로이드 크롤링을 진행했습니다.

 

지자체 축제/행사 | 기관정보 | 정부24

 

www.gov.kr

 

0. 종속성 추가

아래의 링크에 접속해 jsoup-x.x.x.jar을 다운받아 설치하거나

 

Download and install jsoup

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

jsoup.org

app 모듈의 build.gradle에 종속성을 추가해줍니다.

dependencies {
      ...
      implementation 'org.jsoup:jsoup:1.11.3'
      ...
}

 

1. Manifest에 권한 추가

manifest 파일에 Internet 권한을 추가해야 합니다.
<uses-permission android:name="android.permission.INTERNET" />

 

2. 요소 점검

크롤링 해야하는 홈페이지에 들어가 본인이 크롤링하려는 요소의 위에 마우스 커서를 두고 우클릭을 누릅니다. 우클릭을 누르면 뜨는 팝업에서 '요소 점검'을 누릅니다.

 

3. 선택자 경로 복사

'요소 점검'을 누르면 해당 요소를 보여주는 코드로 이동을 하게 되는데 코드 위에 마우스 커서를 두고 우클릭을 누르면 팝업이 뜹니다. '복사하기'에서 '선택자 경로'를 누릅니다. '선택자 경로'를 누르면 해당 요소의 CSS 선택자 경로가 복사됩니다.

 

4. 안드로이드에서 크롤링

지역 축제의 제목들을 가져오려고 보면 <ul> 태그 안에 여러개의 <li>, 그리고 그 안에 <dl> 태그가 있습니다. <ul> 안에 <li> 태그들이 몇 개가 있는지 Elements의 size() 메소드를 통해 알아내고, 해당 요소가 존재하는 만큼 for문을 돌려줍니다.

이제 제목이 있는 태그를 찾아 text를 파싱하고 String에 저장을 하면 되는데, 축제의 제목은 <dl> 태그 안에 <dt> 안에 <a> 태그 안에 text로 있습니다. eq(i) 메소드로 여러개의 <li> 중 i번째를 고르고, select() 메소드로 <dl>-<dt a>까지 파고든 후에 text() 메소드로 텍스트를 받아옵니다.

Log.d()를 통해 시스템 로그에서 제대로 크롤링이 되었는지를 확인합니다.

            try {
            
                String url = "https://www.gov.kr/portal/vfnews";
                Document d = Jsoup.connect(url).get();
                Elements data = d.select("div.gallery_wrap").select("ul").select("li");

                int size = data.size();
                for (int j = 0; j < size; j++) {
                    String title = data
                            .eq(j)
                            .select("dl")
                            .select("dt a")
                            .text();

                    Log.d(TAG, "FESTIVAL TITLE : " + title);

                }

            } catch (IOException e) {
                e.printStackTrace();
            }

 

5. 결과 화면

 

그 외

구현 코드 전문보기

 

Kimnaram/Along-The-Road-Project

🚉 Application that provides accommodation, transportation, travel information for domestic travel - Kimnaram/Along-The-Road-Project

github.com

 

반응형