【问题标题】:Error using HtmlUnit 2.18 for crawl webpages使用 HtmlUnit 2.18 抓取网页时出错
【发布时间】:2015-10-31 02:33:56
【问题描述】:

我有以下代码:

WebClient webClient = new WebClient(BrowserVersion.getDefault());
HtmlPage page;
List<HtmlAnchor> anchor=new ArrayList<HtmlAnchor>();

try {
    System.out.println("Querying");
    page = webClient.getPage("https://www.amazon.com/gp/goldbox");
    anchor = page.getAnchors();
    for(HtmlAnchor s:anchor)
    {
      System.out.println(s.getAttribute("href"));
    }
    System.out.println("Success");
}

查询

Exception in thread "main" java.lang.NoSuchFieldError: INSTANCE
    at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:52)
    at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:56)
    at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<clinit>(DefaultHttpRequestWriterFactory.java:46)
    at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:82)
    at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:95)
    at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:104)
    at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<clinit>(ManagedHttpClientConnectionFactory.java:62)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager$InternalConnectionFactory.<init>(PoolingHttpClientConnectionManager.java:572)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:174)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:158)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:149)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:125)
    at com.gargoylesoftware.htmlunit.HttpWebConnection.createConnectionManager(HttpWebConnection.java:972)
    at com.gargoylesoftware.htmlunit.HttpWebConnection.getResponse(HttpWebConnection.java:161)
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1321)
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponse(WebClient.java:1238)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:346)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:415)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:400)
    at crawler.HtmlUnitCrawl.main(HtmlUnitCrawl.java:29)

可能是什么错误?

【问题讨论】:

    标签: java web-scraping web-crawler htmlunit


    【解决方案1】:

    你有冲突的CLASSPATH,因为你的代码在干净的安装下可以正常工作。

    请删除所有HttpComponents .jar,并使用 HtmlUnit 提供的内容。

    此外,您还可以查看以下用户使用的版本:

        Class<?> klass = DefaultHttpRequestWriterFactory.class;
        String location = klass.getProtectionDomain().getCodeSource().getLocation().toString();
        System.out.println(location);
    

    在你的情况下应该给出httpcore-4.4.1.jar 的位置。

    【讨论】:

    • 我在这一行遇到错误:Class> klass = DefaultHttpRequestWriterFactory.class;。错误是“DefaultHttpRequestWriterFactory 无法解析为类型”
    • org.apache.http.impl.io.DefaultHttpRequestWriterFactory 应该在您的 CLASSPATH 中,不是吗?
    【解决方案2】:

    我确认 HtmlUnit 使用了我的项目中已使用的版本。所以我把 HtmlUnit 版本与我的项目版本兼容,一切正常。

    Httpclient-4.2.1 与 HtmlUnit-2.21(使用 httpclient-4.5.2.jar)冲突。所以我改用 HtmlUnit 2.10(使用 Httpclient-4.2.1),效果很好。

    检查项目中哪些库有冲突

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-01
      相关资源
      最近更新 更多