[I/O] URL, URLConnection - Crawling

포키·2023년 1월 25일
0

국비과정

목록 보기
43/73

Crawling 크롤링

  • Web상을 돌아다니면서 정보를 수집하는 행위
    = 웹페이지를 읽고 내가 원하는 정보를 찾아오는 것
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;

import javax.swing.JOptionPane;

public class Crolling {
	public static void main(String[] args) {
		String urlString;
		do {
			urlString = JOptionPane.showInputDialog("URL");
		} while(urlString == null || urlString.trim().length() == 0);
		
		HttpURLConnection con = null;
		try {
			URL url = new URL(urlString);
			con = (HttpURLConnection)url.openConnection();
			// = Http 프로토콜을 사용하는 URL connection
			String msg = "응답코드 이상: ";
			int responseCode = con.getResponseCode();
			if(responseCode == HttpURLConnection.HTTP_OK || responseCode == HttpURLConnection.HTTP_MOVED_PERM || responseCode == HttpURLConnection.HTTP_MOVED_TEMP) {
				// 정상응답 3가지 - 정상 / 리다이렉션 / 리다이렉션
				try (
					InputStream is = con.getInputStream();	
						//	연결된 페이지를 읽을 수 있는 InputStream을 얻어오는 메서드 (char연산 Stream X)
					BufferedReader br = new BufferedReader(new InputStreamReader(is, "utf-8"));
						// InputStreamReader(InputStream in, String charsetName) - 읽어낸 byte 결과를 원하는 인코딩 방식으로 읽기
					FileOutputStream fos = new FileOutputStream("result.html");
					// OutputStreamWriter osw = new OutputStreamWriter(fos);		// edit-plus는 그대로 써야 함 (utf-8도 가능은 하다)
					OutputStreamWriter osw = new OutputStreamWriter(fos, "utf-8");	// eclipse는 열 때도 utf-8로 써야 함
				) {
					String line = null;
					StringBuffer buf = new StringBuffer();
					while( (line = br.readLine()) != null) {
						buf.append(line + "\n");
					}
					osw.write(buf.toString());
					osw.flush();
					msg = "작업완료";
				} 
			} else {
				msg += responseCode;
			}
			JOptionPane.showMessageDialog(null, msg);
		} catch(IOException e) {
			e.printStackTrace();
		} finally {
			try {
				con.disconnect();
			} catch(Exception e) {}
		}
	}
}
profile
welcome

0개의 댓글