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 에 있는 주소와 주소 제목을 보여줍니다.