2013-02-27 4 views
2

저는 자바 초보자입니다. 웹 사이트에서 데이터를 가져 와서 일종의 데이터 구조에 저장할 수 있습니까? 예를 들어, 프로그램은 주어진 시간에 yahoo finance에서 주식 값을 가져 와서 저장합니다. 내가 말했듯이, 나는 자바에 익숙하지 않고 이것이 가능할 수 있는지 알고 싶습니다. 그것이 가능하다면, 그것을하는 것이 아주 어렵습니까?Java에서 데이터 가져 오기

+2

네, 할 수 있습니다. 예, 어렵습니다 (지각에서). 'URLConnection'을 다루는 방법, 기본적인 I/O 및'String' 파싱을 시작하는 방법 등을 이해해야합니다. JDBC를 이해해야 할 필요조차 있습니다. 약간의 경험과 더불어, 그것은 어렵지 않다. 그래도 기초부터 시작하겠습니다. 로컬 드라이브의 HTML 파일을 읽으십시오. 'String' 파싱의 기본 원리를 이해했다면, 다운로드하십시오. – MadProgrammer

+3

당신은 웹 긁기에 대해 이야기하고 있습니다. Java에서 JSoup라는 유용한 라이브러리가 있습니다. –

+0

기회를 얻으려는 사이트는 이미 프로그래밍 방식으로 훨씬 더 easly 검색된 힘든 HTML 구문 분석 없이는 크롤링 할 수있는 웹 서비스를 제공합니다 – amphibient

답변

0

예. 임의의 웹 페이지를 Java 문자열로 다운로드하고 내용을 구문 분석 할 수 있지만 이러한 솔루션은 신뢰할 수 없습니다. 작성자가 웹 사이트의 구조를 변경하면 코드가 즉시 중단됩니다.

이러한 통합을 수행하는 일반적인 방법은 RESTful web service입니다. 데이터 공급자는 사용자가 호출 할 수있는 & 매개 변수 집합을 가지며 XML 또는 JSON 형식의 주가 데이터를 반환합니다.

0

예 webservice를 사용하여 가능합니다.

  1. Yahoo 또는 기타가 웹 서비스를 노출합니다.
  2. 여러분의 프로그램은 웹 서비스를 소비하고 데이터를 가져오고 내가 광범위하게 JSoup을 사용했습니다
1

당신의 말에 조작을 할 것입니다. 레이아웃이나 구조가 자주 변경되지 않는 웹 사이트에서 데이터를 추출하는 프로그램 만 사용자 정의하면됩니다. JSoup이면 충분합니다.

당신이 (Java에 반드시 익숙하지 않은) 프로그래밍하는 방법에 대한 기본 사항을 알고 가정하고 웹을 구성하는 이해 (html, dom 등이 무엇인지 등), 내가 기대 당신은 웹을 수행하는 방법을 데리러 꽤 빨리 JSoup으로 긁어 모으기.

3
public class GetYahooData 
    { 
     public ArrayList<JSONObject> getOutputFromUrl(String url) 
     { 
      ArrayList<JSONObject> output = new ArrayList<JSONObject>(); 
      HttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpPost = new HttpPost(url); 
      HttpResponse response; 
      StringBuilder builder= new StringBuilder(); 
      JSONObject myjson ; 
      JSONArray the_json_array; 
      try 
      { 
       response = httpClient.execute(httpPost); 
       BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8")); 
       char[] buf = new char[8000]; 
       int l = 0; 
        while (l >= 0) 
        { 
         builder.append(buf, 0, l); 
         l = in.read(buf); 
        } 
       myjson = new JSONObject("{child:"+builder.toString()+"}"); 
       JSONObject mmm = new JSONObject(builder.toString()); 
       JSONArray mmmArr = mmm.getJSONArray("status"); 
       the_json_array = myjson.getJSONArray("child"); 
       for (int i = 0; i < the_json_array.length(); i++) 
       { 
        JSONObject another_json_object = the_json_array.getJSONObject(i);//the_json_array.getJSONObject(i); 
        output.add(another_json_object); 
       } 
      } catch (ClientProtocolException e) { 
       System.out.println("ClientProtocolException :"+e); 
       e.printStackTrace(); 
      } catch (IOException e) { 
       System.out.println("IOException :"+e); 
       e.printStackTrace(); 
      } catch (JSONException e) { 
       System.out.println("JSONException hussain :"+e); 
       e.printStackTrace(); 
      } 
      return output; 
     } 
    } 

public class useYahoo 
{ 
    public static void main(String args[]) 
    { 
     String url = "the url you want the response from"; 
     getYahooData object = new GetYahooData(); 
     ArrayList<JSONObject> output = object.getOutputFromUrl(url); 
    } 
}