2

我是一个java新手。是否可以从网站获取数据,然后将其存储在某种数据结构中?例如,该程序在给定时间从 yahoo Finance 获取股票的价值并将其存储。就像我说的,我对 Java 不是很精通,我想知道这是否可以做到。如果可以的话,是不是很难做到?

4

4 回答 4

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);
    }
}
于 2013-02-27T04:48:34.260 回答
1

我已经广泛使用JSoup。如果您只需要定制一个程序来从一个布局或结构不经常变化的网站中提取数据,JSoup那就足够了,而且很方便。

假设您了解有关如何编程的基础知识(不一定熟悉Java)并了解 Web 的组成部分(例如,什么是html,等等),我希望您能很快dom掌握如何进行 Web 抓取。JSoup

于 2013-02-27T04:39:40.990 回答
0

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

进行这种集成的流行方式是通过RESTful Web 服务。数据提供者将有一组 URL 和参数,您可以调用它们,并返回股票价格数据(以 xml 或 JSON 格式)

于 2013-02-27T04:03:46.157 回答
0

是的,在 web 服务的帮助下是可能的。

  1. 雅虎或其他将公开网络服务。
  2. 您的程序将使用该 Web 服务,并将获取数据并在您结束时进行操作
于 2013-02-27T04:05:00.263 回答