ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 04. 크롤링
    [Java] 단축키 안내 프로그램 2021. 3. 2. 22:23

    안녕하세요 Becca입니다!

     

    단축키 안내 프로그램의 네 번째 시간입니다.

    이번 글에서는 Visual Studio의 단축키를 크롤링 해보도록 하겠습니다.


    Visual Studio의 단축키는 매우 많고, 그것을 모두 적는 것은 시간이 오래 걸립니다.

    그런데, Visual Studio의 단축키가 적혀있는 웹사이트를 찾았다면 어떨까요?

    그러면 단축키를 모두 적는 것이 아니라 복사, 붙여넣기를 한다면 시간이 단축될 것입니다.

    그러나 단순히 복사, 붙여넣기를 한다면 원하지 않는 정보도 같이 따라오게 되고, 이를 구분하는 것도 시간이 걸립니다.

     

    이 문제를 해결하기 위해, 웹사이트의 HTML 코드를 이용하여 원하는 정보만 가져오는 방법인 크롤링(파싱)을 이용하여

    단축키만 txt 파일에 저장해보는 방법을 사용할 것입니다.

     

    [크롤링 사이트]

    현재 사이트가 사라졌기 때문에 크롤링 방법만 알려드리고, txt 파일을 대신 올려드리겠습니다.

     

    [jsoup 다운로드]

    jsoup는 Java에서 크롤링을 하기 위해 필요한 라이브러리 입니다.

     

    1. 아래 링크에 들어갑니다.

    jsoup.org/

     

    jsoup Java HTML Parser, with the best of HTML5 DOM methods and CSS selectors.

    jsoup: Java HTML Parser jsoup is a Java library for working with real-world HTML. It provides a very convenient API for fetching URLs and extracting and manipulating data, using the best of HTML5 DOM methods and CSS selectors. jsoup implements the WHATWG H

    jsoup.org

    2. Download를 클릭합니다.

    3. jsoup-1.13.1.jar을 클릭하여 다운받습니다.

     

    4. 프로젝트 파일을 우클릭하여 Properties를 클릭합니다.

     

    5. Java Build Path를 클릭하고, Add External Jars... 버튼을 클릭합니다.

     

    6. 위에서 다운받았던 jsoup-1.13.1.jar 파일을 찾고, 열기를 눌러주세요.

     

    7. jsoup 라이브러리가 추가된 것을 확인한 후, Apply and Close를 눌러서 적용시켜줍니다.

     

    여기까지 하면 Referenced Libraries 안에 jsoup 라이브러리가 추가된 것을 볼 수 있습니다.

    [Crawling 클래스]

    크롤링을 하기 위해서는 원하는 정보와 그 정보가 들어있는 HTML 코드가 필요합니다.

    여기선 단축키원하는 정보이고, 그 정보가 들어있는 HTML 코드dl 안의 dd에 들어있었습니다.

    이제, 이 HTML 코드를 이용하여 단축키를 가져온 다음, txt 파일에 저장해보도록 하겠습니다.

     

    1. crawling 패키지를 만들고, Crawling.java 클래스를 만들어줍니다.

     

    2. 파일 입출력과 jsoup 라이브러리와 관련된 것을 import 해줍니다.

    (앞의 jsoup 라이브러리를 적용해야 가능합니다!)

    // 파일 입출력
    import java.io.*;
    
    // jsoup 라이브러리
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;

     

    3.  크롤링을 하려고 하는 사이트의 url을 URL에 저장하고, Document 객체를 만듭니다.

    (Document 객체는 jsoup를 이용하여 HTML 전체 문서를 얻을 수 있는 객체입니다.)

    // 크롤링
    String URL = "크롤링을 하려고 하는 사이트 url";
    Document doc = null;

     

    4. shortcut 폴더를 만들어줍니다. (txt 파일을 저장할 장소입니다.)

     

    5. 파일 입출력에 필요한 객체들을 선언해주고, 코드를 try-catch로 감싸줍니다.

    try
    {
    	// 3번 코드 생략
        
    	FileOutputStream fos = new FileOutputStream(new File("shortcut/shortcut.txt")); 
    	// 경로/파일이름.txt으로 지정한 경로 안에 txt파일이 생김
    	// 파일 입출력에는 try-catch가 필요
        
    	OutputStreamWriter osw = new OutputStreamWriter(fos);
    	// 문자 스트림 → 바이트 스트림
        
    	BufferedWriter bw = new BufferedWriter(osw);
    	// System.out.println()과 동일하지만 많은 양을 적을 때 필요
    }
    catch (Exception e)
    {
    	e.getStackTrace();
    	// 어떤 함수를 통해서 왔는지 보여주는 것 (어디에서 오류가 났는지 알아보기 위해 사용)
    }

     

    6. 코드를 try-catch로 감싸주고, 위에서 사이트의 url을 저장한 URL을 이용하여 HTML 전체 문서를 얻어줍니다.

    try 
    {
    	doc = Jsoup.connect(URL).get();
    	// url을 이용해 Document(HTML 전체 문서)를 얻음
    }
    catch (IOException e) 
    {
    	e.printStackTrace();
    	// 어떤 함수를 통해서 왔는지 보여주는 것 (어디에서 오류가 났는지 알아보기 위해 사용)
    }

     

    7. dl 안 dd에 단축키가 들어있어 select를 사용하여 dd 안의 텍스트(단축키)만 txt 파일에 저장합니다.

    Elements elem = doc.select("dl"); // 단축키, 단축키 기능이 들어있는 곳
    for(Element el : elem.select("dd")) // 단축키가 들어있는 곳
    {
    	bw.write(el.text()); // shortcut.txt 파일에 크롤링한 단축키를 넣음
    	bw.newLine(); // 한 줄 띄우기
    }

     

    8. 5번 코드에서 선언한 것들을 닫아줍니다. (선언한 순서의 반대로 닫아줍니다.)

    bw.close();
    osw.close();
    fos.close();

     

    여기까지 따라오셨다면 크롤링한 단축키가 shortcut 폴더 안 shortcut.txt 파일에 들어가 있을 것입니다.

    (단축키 기능은 제가 따로 작성하였고, 사진 아래에 txt 파일을 첨부하였습니다.)

    shortcut.txt
    0.02MB

     

    [전체 코드]

    package crawling;
    
    import java.io.*;
    
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;
    
    public class Crawling 
    {
    	public static void main(String[] args) 
    	{
    		try 
    		{
    			// 크롤링
    			String URL = "크롤링을 하려고 하는 사이트 url";
    			Document doc = null;
    			
    			// 파일 입출력
    			FileOutputStream fos = new FileOutputStream(new File("shortcut/shortcut.txt"));
    			OutputStreamWriter osw = new OutputStreamWriter(fos);
    			BufferedWriter bw = new BufferedWriter(osw);
    			
    			try 
    			{
    				doc = Jsoup.connect(URL).get();
    			}
    			catch (IOException e) 
    			{
    				e.printStackTrace();
    			}
    			
    			Elements elem = doc.select("dl");
    			for(Element el : elem.select("dd"))
    			{
    				bw.write(el.text());
    				bw.newLine();
    			}
    			
    			bw.close();
    			osw.close();
    			fos.close();
    		} 
    		catch (Exception e) 
    		{
    			e.getStackTrace();
    		}
    	}
    }
    

    여기까지 잘 따라오셨나요?

    크롤링을 한 사이트가 사라져 당황했지만, 크롤링 방법을 알려드리기 위해 글을 적었습니다.

    단축키와 단축키의 기능이 들어간 txt 파일은 위에 올려두었으니 shortcut 폴더 안에 넣어주세요!

     

    다음 글에서는 단축키 사전을 만들어보도록 하겠습니다.

    다음 글에서 만나요!

    '[Java] 단축키 안내 프로그램' 카테고리의 다른 글

    03. 메인 페이지  (0) 2021.02.17
    02. 타이틀바 삭제  (0) 2021.02.09
    01. 메인 프레임  (0) 2021.01.08
    00. 프로그램 소개  (0) 2021.01.02

    댓글

Designed by Tistory.