0

我有一个小项目,我正在从网页中抓取信息。作为开始步骤,我开始查看页面源代码

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 函数调用时未运行有关。

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

4

1 回答 1

2

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

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

HtmlUnit 可以在这里找到。

于 2013-10-05T21:37:22.687 回答