반응형

Android용  HTML 파서(Parser) jsoup를 사용하여 HTML 문서에서 주소를 추출하는 예제입니다.



2015. 11. 2 최초작성

2021. 1. 26 최종작성 




1. Empty Activity를 사용하는 새로운 안드로이드 프로젝트를 생성합니다.





2.  http://jsoup.org/download 에서 jar 파일을 다운로드 받습니다.





3. Project 뷰 보기로 변경합니다. 





4. 안드로드이 프로젝트에  libs 디렉토리에 jsoup-1.13.1.jar 파일을 복사해줍니다. 탐색기에서 안드로이드 스튜디오에 보이는 libs 디렉토리로 드래그앤드롭 해주면 됩니다.





5. jsoup-1.13.1.jar 파일에서 마우스 우클릭하여 보이는 메뉴에서 Add As Library를 선택해줍니다.





6. AndroidMenifest.xml 파일에 다음 한 줄을 추가해줍니다.



<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.tistory.webnautes.htmlparser">

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

    <application
        android:allowBackup="true"




7. activity_main.xml 파일에 텍스트 뷰 하나와 버튼 하나를 추가해주었습니다.




<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:text=""
        android:id="@+id/textView"
        android:scrollbars = "vertical"
        android:layout_above="@+id/button" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="HTML 가져오기"
        android:id="@+id/button"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" />

</RelativeLayout>    




8.이제 MainActivity.java에 필요한 코드를 추가합니다. 주의할 점은 주소 입력시  https://로 사용해야합니다.


package com.tistory.webnautes.htmlparser;

import android.os.AsyncTask;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;


public class MainActivity extends AppCompatActivity {

    private String htmlPageUrl = "https://www.daum.net/";
    private TextView textviewHtmlDocument;
    private String htmlContentInStringFormat;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        textviewHtmlDocument = (TextView) findViewById(R.id.textView);
        textviewHtmlDocument.setMovementMethod(new ScrollingMovementMethod());

        Button htmlTitleButton = (Button) findViewById(R.id.button);
        htmlTitleButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                JsoupAsyncTask jsoupAsyncTask = new JsoupAsyncTask();
                jsoupAsyncTask.execute();
            }
        });
    }

    private class JsoupAsyncTask extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected Void doInBackground(Void... params) {
            try {
                Document doc = Jsoup.connect(htmlPageUrl).get();
                Elements links = doc.select("a[href]");

                for (Element link : links) {
                    htmlContentInStringFormat += (link.attr("abs:href")
                            + "(" + link.text().trim() + ")\n");
                }

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

        @Override
        protected void onPostExecute(Void result) {
            textviewHtmlDocument.setText(htmlContentInStringFormat);
        }
    }
}




9. HTML 가져오기를 클릭하면 https://www.daum.net  에 있는 주소와 주소 제목을 보여줍니다. 



반응형

포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
질문을 남겨주면 가능한 빨리 답변드립니다.

여러분의 응원으로 좋은 컨텐츠가 만들어집니다.
지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 ~~

유튜브 구독하기


제가 쓴 책도 한번 검토해보세요 ^^

  1. 정말감사 2015.11.15 02:43

    정말 감사합니다 광광 우럭따..

  2. 감사 2016.02.18 22:11

    잘 정리해두셨네요. 감사합니다

  3. WooAh 2017.05.10 20:02

    와 정말 감사합니다.
    복받으세요

  4. 감사합니다 2017.08.10 20:29

    정말 감사합니다

  5. 2019.11.30 20:07

    비밀댓글입니다

  6. chosmtree 2020.01.14 00:50

    <uses-permission android:name="android.permission.INTERNET" /> 이거는 왜 추가하는 건가요??

  7. sdss 2020.03.04 00:00

    버튼을 눌렀는데 아무 작동을 안해요 왜 이런걸까요

+ Recent posts