Java:取代HTML CURL的HtmlUnit效率?

问题描述

| 我有一个蜘蛛类,该类在用户请求蜘蛛网站提供内容。每次搜索都会加载大约30个网站,搜寻它们以获得信息,然后对这些信息进行标准化。 我已经使用CURL在PHP中编写了此代码,因为PHP缺少多任务处理,所以我想切换到Java(我知道多进程curl不适合我的需求)。我需要一个HTTP客户端,该客户端可以POST / GET,接收和设置Cookie以及修改HTTP标头。 我发现HtmlUnit看起来很漂亮,但也超出了我的需求,而且由于该软件包相对较大,而且我一分钟会收到许多hundread请求,因此我不想使用过分的解决方案来减慢服务器速度。 您是否认为这将成为问题,并且您还有其他建议来替换Java中的CURL吗?我应该使用Java CURL绑定吗?这是效率和服务器负载的问题。     

解决方法

        也许看看Apache Http Client? 您可以为每个线程创建一个HttpClient并使用它来执行您的请求
while (running) {

HttpClient client = new DefaultHttpClient();
HttpGet GET = new HttpGet(\"mydomain.com/path.html\");
HttpResponse response = client.execute(GET);
// do stuff with response

}
更好的是,如果您在请求之间重用HttpClient,它将记住上一个响应发送回的cookie,并将它们自动应用于下一个请求。从这个意义上讲,一个HttpClient可以为http对话建模。 所以如果你做了
 client.execute(GET1);
  // cookies received in response
  client.execute(GET2);
  // the second get will send the cookies back received from GET1 response.
然后,您可以查看Java的ExecutorService,它将使放置蜘蛛作业和运行多个线程变得容易。     ,        最终,您将需要评估潜在的解决方案,以找出最适合您需求的解决方案。 HtmlUnit提供了丰富的Api,用于解析网页以及在页面上查找和评估元素。 一个更简单的解决方案是仅使用HttpClient(HtmlUnit在后台使用)。这将简单地下载整个页面并将其作为OutputStream或String返回。然后,您可以使用正则表达式查找链接等。可能更像是您当前使用curl进行的操作。     ,        尝试http://code.google.com/p/crawler4j/ 不需要javascript的简单有效的解决方案。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...