从网址中检索整页来源

时间:2013-10-05 21:29:47

标签: java html web jsoup

我正在制作一个小项目,我正在从网页上抓取信息。作为开始步骤,我开始查看来自

的页面源代码

http://www.walmart.com/search/search-ng.do?search_query=camera&ic=16_0&Find=Find&search_constraint=0

在分析了我需要做的事情后,我尝试使用两种不成功的方法检索相同的页面信息

首先,我尝试使用Jsoup的简单请求,如下所示

    Document doc;
    try {
        doc = Jsoup.connect("http://www.walmart.com/search/search-ng.do?search_query=camera&ic=16_0&Find=Find&search_constraint=0").get();

        System.out.println(doc);

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

它提供了一些页面信息,但没有提供包含所有搜索结果的实际页面源

然后我尝试了Apache Commons http解决方案,看起来像

    String url = "http://www.walmart.com/search/search-ng.do?search_query=camera&ic=16_0&Find=Find&search_constraint=0";
    DefaultHttpClient httpclient = new DefaultHttpClient();
    HttpPost request = new HttpPost(url);

        HttpResponse response;
        try {
            response = httpclient.execute(request);
            StatusLine status = response.getStatusLine();
            String responseString = EntityUtils.toString(response.getEntity());

            System.out.println(status);
            System.out.println(responseString);

        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

但我一直收到永久移动状态的页面。

到目前为止,似乎Jsoup是我向前迈进的最佳选择。我认为没有收到所有搜索结果的问题与Jsoup的get函数调用时页面上未运行的脚本有关。

如何获取所有页面信息,以便我可以开始从搜索结果中检索信息。

1 个答案:

答案 0 :(得分:2)

Jsoup不支持执行javascript,这意味着您无法解析动态生成的HTML。简单地说,Jsoup不会模拟浏览器环境,但它是一个纯粹的解析器。

我建议您使用HtmlUnit,这是一个“无GUI的Java程序浏览器”。 它支持javascript执行,可用于生成HTML源代码,然后您可能希望使用Jsoup更轻松地解析。

可以找到HtmlUnit here