我正在用 Java 编写一个简单的网络爬虫。我希望它能够每秒下载尽可能多的页面。是否有一个包可以使在 Java 中轻松执行异步 HTTP Web 请求?我已经使用了 HttpURLConnection ,但那是阻塞的。我也知道 Apache 的 HTTPCore NIO 中有一些东西,但我正在寻找更轻量级的东西。我尝试使用这个包,并且在多个线程上使用 HttpURLConnection 获得了更好的吞吐量。
问问题
6478 次
2 回答
6
一般来说,只要线程数低于 1000,数据密集型协议在使用经典阻塞 I/O 的原始吞吐量方面往往比 NIO 表现更好。至少基于客户端 HTTP 的情况肯定是这样的( Apache HttpClient [1] 使用的 HTTP 基准测试可能不完善且可能存在偏差
只要线程数适中(<250),使用带有线程的阻塞 HTTP 客户端可能会好得多
如果你绝对确定你想要一个基于 NIO 的 HTTP 客户端,我可以推荐 Jetty HTTP 客户端,我个人认为它是目前最好的异步 HTTP 客户端。
[1] http://wiki.apache.org/HttpComponents/HttpClient3vsHttpClient4vsHttpCore
于 2010-12-08T13:06:41.197 回答
3
虽然该用户没有问同样的问题,但您可能会发现他的问题的答案很有用:Asynchronous HTTP Client for Java
附带说明一下,如果您要“每秒下载尽可能多的页面”,您应该记住,爬虫可能会无意中使薄弱的服务器停止运行。您可能应该阅读“robots.txt”以及解释此文件的适当方式,然后再将您的创作释放到您自己的个人测试设置之外的任何内容上。
于 2010-12-08T04:40:49.817 回答