UrlTest.java -----------------
import java.io.*;
import java.net.URL;
class UrlTest {
public static void main(String args[]) {
URL url = null;
try {
url = new URL("http://v.media.daum.net/v/20170126112504371/"); //웹문서 읽기
System.out.println("url=" + url);
InputStreamReader isr = new InputStreamReader(url.openStream(), "UTF-8");
BufferedReader br = new BufferedReader(isr);
String readLine = null;
StringBuffer buffer = new StringBuffer();
while ((readLine = br.readLine()) != null) {
buffer.append(readLine);
}
br.close();
//System.out.println(buffer.toString()); //<!doctype html><html lang="ko"> ...
HtmlParser htmlParser = new HtmlParser(); //html tag 제거
String result = htmlParser.getConvData(buffer.toString());
String regex = "[^\uAC00-\uD7AF\u1100-\u11FF\u3130-\u318F]+";
//[\uAC00-\uD7AF\u1100-\u11FF\u3130-\u318F] 한글만 추출
//한글 처리:하나 이상에 매칭된다는 의미로 여러 개의 한글이 아닌 문자가 하나의 공백문자로 교체
System.out.println(result.replaceAll(regex, " "));
//정제된 문자열을 파일로 저장 -----------------------------
FileWriter fw = new FileWriter("mbc.txt");
BufferedWriter bw = new BufferedWriter(fw);
bw.write(result.replaceAll(regex, " "));
bw.close();
System.out.println("저장 완료");
} catch (IOException e) {
System.out.println("에러:" + e);
}
}
}
HtmlParser.java -----------------
import java.io.StringReader;
import javax.swing.text.MutableAttributeSet;
import javax.swing.text.html.HTML;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.parser.ParserDelegator;
public class HtmlParser {
private StringBuffer out_text = null;
private int parser_ok = 0;
public HtmlParser() {}
public String getConvData(String htmlData) {
out_text = new StringBuffer();
if (htmlData.indexOf("<meta") != -1) {
String temp = "";
while (htmlData.indexOf("<meta") != -1) {
temp = htmlData.substring(0, htmlData.indexOf("<meta"));
htmlData = htmlData.substring(htmlData.indexOf(">", htmlData.indexOf("<meta")) + 1, htmlData.length());
htmlData = temp + htmlData;
}
}
try {
HTMLEditorKit.ParserCallback callback = new HTMLEditorKit.ParserCallback() {
public void handleStartTag(HTML.Tag tag, MutableAttributeSet a, int pos) {
if (tag.equals(HTML.Tag.BODY)) parser_ok = 1;
}
public void handleText(char[] data, int pos) {
if (parser_ok == 1) {
for (int k = 0; k < data.length; k++) {
if (data[k] == (char) 160) //space
data[k] = (char) 32;
else
out_text.append(data[k]);
}
}
}
};
new ParserDelegator().parse(new StringReader(htmlData), callback, false);
} catch (Exception e) {
e.printStackTrace();
}
//System.out.println(out_text.toString());
return out_text.toString();
}
}
----------------------------------------- ----------------------------------------- -----------------------------------------
** 위키백과 사이트에 검색어를 주고 검색된 결과 문서 출력하기 **
pom.xml
<dependencies>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.15.3</version>
</dependency>
</dependencies>
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.util.Scanner;
public class WikipediaCrawler {
public static void main(String[] args) {
// 1. 사용자로부터 검색어 입력 받기
Scanner scanner = new Scanner(System.in);
Systehttp://m.out.print("검색어를 입력하세요: ");
String query = scanner.nextLine();
// 2. 검색어로 위키백과 URL 생성
String url = "https://ko.wikipedia.org/wiki/" + query;
try {
// 3. Jsoup를 이용하여 해당 URL의 HTML 페이지 파싱
Document doc = Jsoup.connect(url).get();
// 4. 페이지의 제목 출력
System.out.println("페이지 제목: " + doc.title());
// 5. 본문 내용 모두 출력
Elements paragraphs = doc.select("div.mw-parser-output > p");
if (!paragraphs.isEmpty()) {
System.out.println("\n본문 내용:");
for (Element paragraph : paragraphs) {
String text = paragraph.text().trim();
if (!text.isEmpty()) {
System.out.println(text);
}
}
} else {
System.out.println("본문 내용을 찾을 수 없습니다.");
}
} catch (IOException e) {
System.out.println("웹 페이지를 가져오는 데 오류가 발생했습니다: " + e.getMessage());
}
}
}
실행 결과: