0

给定一个 url 链接,我想以 html 格式获取页面的内容。在 Java 中,我知道我可以用getInputStream方法实现它。

问题是,现在我有数百万个 URL。并想得到他们的html页面。如果我仍然使用getInputStream. 这很耗时,性能很差。所以我想加快获取页面的过程。

希望得到有效的方法和高速来做到这一点。

提前致谢!

4

2 回答 2

1

大量抓取一百万个 URL 是一项棘手的工作。一方面,使用线程池 ( Executors.newFixedThreadPool(100)) 和Apache Http 客户端池很容易。然而,即使是运行此代码的中速系统也可以完全在服务器上执行拒绝服务附加——向开始崩溃的特定服务器发送如此多的请求。

诀窍是如何限制你的线程,这样它们就不会以这样的速度向同一个服务器(甚至可能是同一个 C 类)发出请求以压倒它们。一种方法是让一个线程执行名称 -> IP 解析,然后它可以以一种可衡量的方式将 URL 添加到待爬取队列中。例如,谷歌每分钟都会抓取一个 URL 的小网站。他们下降到一秒钟,这表明他们的蜘蛛技术在安排下载方面有多好。但是有一些中等难度的线程和队列逻辑可以让它正确。

我认为最好的方法是使用[希望]已经解决了这个问题的现有技术。以下是一些可能会引导您访问现有实现的链接。

于 2012-04-24T13:13:56.023 回答
0

我建议使用一些开源网络爬虫,例如Crawler4jApache Nutch。只需将所有 url 作为爬虫的种子导入并设置 depth=1。
Crawler4j 是一个轻量级的网络爬虫,为用户提供非常简单的界面。将 Crawler4j 与您的应用程序集成非常容易。
与 Crawler4j 相比,Nutch 复杂得多。学习和定制 nutch 需要更多时间。
如果你想自己动手,Apache HTTP Client 是个不错的选择。许多网络爬虫都是基于它的。为了礼貌,在一秒钟内限制您的请求数量,这有助于您避免拒绝服务问题。

于 2012-04-28T04:15:24.933 回答