1. Jsoup 다운받아 설치 및 라이브러리 추가

2. manifest 권한 추가

3. fragment에서 웹크롤링


 

1. 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.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

Jsoup사이트에 들어가서 jsoup-1.13.1.jar 파일을 다운 받는다.

 

Project로 변경 후 app - libs에 다운받은 파일을 넣어준 후

jar파일을 우클릭해서 "Add as Library..." 클릭해서 라이브러리에 추가시켜준다.

 

2. manifest 권한 추가

<uses-permission android:name="android.permission.INTERNET" />

<manifest> 태그 내부에 해당 권한을 추가한다.

 

3. fragment에서 웹크롤링

질병관리본부 코로나19 데이터를 예로 map_city1 ~ map_city18까지 지역별 데이터가 담겨있는데 선택자나 태그를 이용해 원하는 데이터까지 접근해서 해당데이터를 가져오실 수 있습니다.

public class ListData{
    private String tv_name;
    private String tv_cases;
    private String tv_cases_p;
    private String tv_deaths;
    private String tv_recovered;

    public ListData(String tv_name, String tv_cases, String tv_cases_p, String tv_deaths, String tv_recovered){
        this.tv_name = tv_name;
        this.tv_cases = tv_cases;
        this.tv_cases_p = tv_cases_p;
        this.tv_deaths = tv_deaths;
        this.tv_recovered = tv_recovered;
    }

    public String getTv_name() {
        return tv_name;
    }

    public void setTv_name(String tv_name) {
        this.tv_name = tv_name;
    }

    public String getTv_cases() {
        return tv_cases;
    }

    public void setTv_cases(String tv_cases) {
        this.tv_cases = tv_cases;
    }

    public String getTv_cases_p() {
        return tv_cases_p;
    }

    public void setTv_cases_p(String tv_cases_p) {
        this.tv_cases_p = tv_cases_p;
    }

    public String getTv_deaths() {
        return tv_deaths;
    }

    public void setTv_deaths(String tv_deaths) {
        this.tv_deaths = tv_deaths;
    }

    public String getTv_recovered() {
        return tv_recovered;
    }

    public void setTv_recovered(String tv_recovered) {
        this.tv_recovered = tv_recovered;
    }
}

담아주기 위해서 ListData클래스를 만들고

public class FragmentRegion extends Fragment {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_region, container, false);

        regionData task = new regionData();
        task.execute();

        return view;
    }

    private class regionData extends AsyncTask<Void, Void, ArrayList<ListData>> {

        @Override
        protected ArrayList<ListData> doInBackground(Void... voids) {

            ArrayList<ListData> arrayList = new ArrayList<ListData>();

            try {
                /* Jsoup을 이용해 데이터 가져오기 */
                Document document = Jsoup.connect("http://ncov.mohw.go.kr/").get();
                Elements doc = document.select("div.rpsa_detail > div > div");

                int region_num = 0;
                String region = null;
                String region_cases = null;
                String region_cases_p = null;
                String region_deaths = null;
                String region_recovered = null;

                for(int i=1; i<doc.size(); i++) {

                        region = doc.get(i).select("h4").text();
                        region_cases = doc.get(i).select("li").get(0).select("div").get(1).select("span").text();
                        region_cases_p = doc.get(i).select("li").get(1).select("div").get(1).select("span").text();
                        region_deaths = doc.get(i).select("li").get(2).select("div").get(1).select("span").text();
                        region_recovered = doc.get(i).select("li").get(3).select("div").get(1).select("span").text();

                        if(region_cases_p.equals("(0)")){
                            region_cases_p = "";
                        }

                        arrayList.add(new ListData(region, region_cases, region_cases_p, region_deaths, region_recovered));

                }

            } catch (Exception e) {
                e.printStackTrace();
            }
            return arrayList;
        }

        @Override
        protected void onPostExecute(ArrayList<ListData> arrayList) {

            // doInBackground 완료 후 실행시킬 코드
        }
    }

}

위와 같이 doInBackground에서 try catch를 이용해 크롤링을 하고

onPostExecute에서 doInBackground가 완료된 후 실행시킬 코드를 작성하시면 됩니다.

그리고 onCreateView에서 execute()시켜주셔야 doInBackground가 작동합니다.

 

 

(+ URL주소가 http로 시작하는 경우에는 https://sseong66.tistory.com/30 에 업로드 된 내용과 같이 진행하시면 문제없이 작동합니다.)


'안드로이드 > Android' 카테고리의 다른 글

[Android] 오픈소스 UI 사용하기  (0) 2020.05.22
[Android] Jsoup 웹크롤링 http 사이트 연결방법  (0) 2020.04.22
[Android] 애드몹 광고  (0) 2020.04.17
[Android] ScalableLayout  (0) 2020.04.17
[Android] RecyclerView  (0) 2020.04.10

+ Recent posts