我想使用htmlunit从网站上抓取数据。我将地址作为表单中的属性传递。我不断收到错误,它说“java.lang.NoClassDefFoundError:com / gargoylesoftware / htmlunit / WebClient”,即使我导入了.jar文件并正确设置了javadoc文件位置。我错过了什么吗?
package coreservlets;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlDivision;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
@WebServlet("/WebScrape")
@SuppressWarnings("serial")
public class WebScrape extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
// Create and initialize WebClient object
final WebClient webClient = new WebClient();
String Address = (String) request.getAttribute("address");
HtmlPage page = webClient.getPage(Address);
final HtmlDivision div = (HtmlDivision) page.getByXPath("//*[@id=\"LDPOffMarketPropertyInfo\"]//div//ul//li[4]//span[1]//text()");
out.println("<!DOCTYPE html>\n" +
"<html>\n" +
"<head>\n" +
"<meta name=" + "\"viewport\" " + "content=" + "\"initial-scale=1.0, user-scalable=no\" " + "/>\n" +
"<style type=" + "\"text/css\">\n" +
" html { height: 100% }\n" +
" body { height: 100%; margin: 0; padding: 0 }\n" +
" #default { height: 800px;\n"+
" width: 400px; }\n" +
" </style>\n" + div);
}
}
答案 0 :(得分:2)
假设您使用Eclipse,构建路径就是:用于构建应用程序的库集。
您还需要在webapp中的运行时中提供这些库。 servlet规范解释了webapp的库必须在哪里:WEB-INF/lib
。
从构建路径中删除jar文件,并将它们放在WebContent目录的WEB-INF/lib
文件夹中。这将自动将它们添加回构建路径,并使它们成为已部署应用程序的一部分,从而在运行时可用。
它们也将出现在Eclipse的package explorer中的 Web App libraries 节点下,确认这些库是webapp的一部分。