【发布时间】:2013-04-04 10:38:23
【问题描述】:
我正在构建一个网络爬虫。 Having read this我知道DNS解析很慢,所以我们应该分离出DNS Resolver。
所以说你有 字符串 urlString http://google.com 然后,您可以通过执行将其转换为 ip
URL url = new URL(urlString)
InetAddress ip = InetAddress.getByName(url.getHost());
但是你如何下载实际的网站本身呢?
使用 url,我们可以像这样:
String htmlDocumentString = new Scanner(new url.openStream(), "UTF-8").useDelimiter("\\A").next();
但是如果我们想使用解析后的IP,我们是否必须手动重构带有ip的URL?没有url.setHost()方法,看起来有点乱?
【问题讨论】:
-
"分离出 DNS 解析器?"我不明白重点。是的,DNS 解析会增加开销,但我看不出“将其分离”如何让您的网络爬虫更快。
-
最简单的方法是拥有一个本地 DNS 缓存,因为当您进行 URL 内容加载时,许多服务器依赖于带有域的 VirtualHost。如果您直接请求 IP,您将无法获得正确的内容。