用Java检索数据

时间:2013-02-27 03:58:39

标签: java data-structures web-scraping data-extraction

我是java新手。是否有可能从网站获取数据,然后将其存储在某种数据结构中?例如,该程序在给定时间从雅虎财务获取股票的价值并存储它。就像我说的那样,我不熟悉Java,我想知道是否可以做到这一点。如果可以的话,这样做是否很难?

4 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:1)

我广泛使用了JSoup。如果您只需要自定义程序以从布局或结构不经常更改的网站中提取数据,JSoup就足够了。

假设您了解有关如何编程的基础知识(不一定熟悉Java)并了解Web的构成(例如,htmldom等),我我希望你能快速了解如何使用JSoup进行网页抓取。

答案 2 :(得分:0)

是的,您可以将任意网页下载到Java字符串中并解析内容,但这样的解决方案不可靠。如果作者更改了网站的结构,您的代码将立即中断。

进行此类整合的流行方式是RESTful web service。数据提供者将拥有一组URL&amp;您可以调用的参数,并返回股票价格数据(xml或JSON格式)

答案 3 :(得分:0)

是的,可以在webservice的帮助下完成。

  1. 雅虎或其他人会公开网络服务。
  2. 您的程序将使用该Web服务,并将获取数据并在您的最后进行操作