[Java] 사이트 데이터를 읽는 2가지 방법

    자바에서는 사이트 데이터를 읽기 위해서 기본적으로 라이브러리들을 제공하고 있다. 그 중 2가지의 대표적인 방식을 포스팅에 적어보고자 한다.


    사이트 데이터를 읽는다는 것은, 특정 URL(ex: www.naver.com)을 입력하였을 때, HTML(Hyper Text Markup Language), JSON(JavaScript Object Notation), XML(Extensible Markup Language), OpenAPI 등의 데이터를 읽어 들인다는 것을 의미한다. 


    이렇게 다른 사이트의 데이터를 읽어와서 자신만의 데이터베이스를 구축하는 경우가 많은데, 물론 이것을 서비스 하는 것은 법적으로 문제가 있을 수 있겠지만 이 데이터로 무언가를 분석하거나, 2차적인 아이디어를 구축하는 경우가 많다.




    Type1, openStream


    자바에서 기본적으로 제공하는 URL 객체에는 openStream이라는 하위 메소드를 가지고 있다. 이 메소드를 호출하게 되면, 매우 쉽게 사이트의 정보를 읽어들일 수 있다.


    소스 예제

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
     
    import java.net.URL;
     
    public class main {
     
        public static void main(String[] args) throws Exception {
            String url = "https://www.oracle.com/index.html";
            
            urlOpenStream(url);
        }
        
        
        public static void urlOpenStream(String _url) throws Exception {
            URL oracle = new URL(_url);
        
            BufferedReader in = new BufferedReader(
                                new InputStreamReader(oracle.openStream(), "UTF8"));
        
            String inputLine;
            while ((inputLine = in.readLine()) != null)
                System.out.println(inputLine);
            in.close();
        }
    }
    cs

    urlOpenStream 메소드를 보게 되면, URL만 가지고, InputStreamReader에 스트림을 보내서 처리하는 것을 볼 수 있다. 이런 방식은 심플하지만, 커넥션의 문제등이 발생하는 등의 여러가지 설정을 추가로 할 수 없기 때문에 잘 쓰이지 않는 방식이다. 



    결과, 마지막 부분만

    <!-- BEGIN: oWidget_C/_Raw-Text/Display -->

    <!-- OCOM HomePage EndBodyAdminContainer --> 

    <!--DTM embed code - Footer -->

    <script type="text/javascript">_satellite.pageBottom();</script>

    <!--End-->




    <!-- END: oWidget_C/_Raw-Text/Display -->



    <!-- end : ocom/common/global/components/framework/layoutAssetEndBodyInfo -->



    </body>

    <!-- end : Framework/HomePage -->

    </html>



    Type2, HttpURLConnection


    소스 예제

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
     
    public class main {
     
        public static void main(String[] args) throws Exception {
            String url = "https://www.oracle.com/index.html";
            
            urlConnection(url);
        }
        
        
        public static void urlConnection(String _url) throws Exception {
            URL url = null;
            BufferedReader reader = null;
     
            url = new URL(_url);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("GET");
            con.setReadTimeout(1000);
            con.connect();
     
                  
            reader = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF8"));
            
            String inputLine = null;
            while ((inputLine = reader.readLine()) != null) {
                System.out.println(inputLine);
            }
            
            reader.close();
        }
    }
    cs


    HttpURLConnection을 사용하게 되면, 다양한 옵션등을 설정할 수 있게 된다. GET, POST 설정이라든지, Timeout 설정부터 UserAgent 설정등을 사용하여, 보다 사용자가 원하는 형태로 구현할 수 있게 해준다.



    결과, 마지막 부분만

    <!-- BEGIN: oWidget_C/_Raw-Text/Display -->

    <!-- OCOM HomePage EndBodyAdminContainer --> 

    <!--DTM embed code - Footer -->

    <script type="text/javascript">_satellite.pageBottom();</script>

    <!--End-->




    <!-- END: oWidget_C/_Raw-Text/Display -->



    <!-- end : ocom/common/global/components/framework/layoutAssetEndBodyInfo -->



    </body>

    <!-- end : Framework/HomePage -->

    </html>


    댓글

    Designed by JB FACTORY