Java:HtmlUnit相对于PHP CURL的效率


Java: HtmlUnit efficiency relacing PHP CURL?

我有一个spider类,它在用户请求spider网站提供内容。每次搜索的结果是加载大约30个网站,在其中搜索信息,然后将这些信息标准化。

我用CURL用PHP写了这篇文章,因为PHP缺乏多任务处理,我想改用Java(我知道多进程CURL不适合我的需求)。我需要一个http客户端,它可以POST/GET、接收和设置cookie以及修改http头。

我发现了HtmlUnit,它看起来很漂亮,但也超出了我的需求,而且由于包相对较大,我一分钟内会有很多可怕的请求,我不想有一个过度的解决方案来减慢我的服务器速度。

你认为这会是一个问题吗?你有其他建议来取代Java中的CURL吗?我应该使用Java CURL绑定吗这是一个效率和服务器负载的问题。

也许可以看看Apache Http客户端?

你可以为每个线程创建一个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所做的操作。

tryhttp://code.google.com/p/crawler4j/当您不需要javascript时,简单高效的解决方案。