2012-09-26 43 views
0

我需要构建简化的网站下载器。它将基本查看网站中的链接并递归下载html文件到本地目录。哪个数据结构最适合这个?我知道我必须实现某种深度优先搜索算法,核心Java中是否有适合我的任务的数据结构库,并且会减少我的编码量? (我对Java非常陌生)谢谢!在Java中构建网站下载器的数据结构

回答

0

我觉得以下两种方法可以帮到你.. 你所要做的是提供一个字符串数组链接,它会下载根目录中的所有页面。 好吧,这段代码可以帮助你部分,如果你只是想下载页面。

public static void downloadPage(String[] pageLink) { 
URL url; 
InputStream is = null; 
DataInputStream dis; 
String line; 
StringBuilder builder = new StringBuilder(); 
builder.append(""); 

try { 
for (int i = 0; i < pageLink.length; i++) { 
url = new URL(pageLink[i]); 
is = url.openStream(); 
dis = new DataInputStream(new BufferedInputStream(is)); 

while ((line = dis.readLine()) != null) { 
builder.append(line + "\n"); 
} 
savePage(i + ".html", builder.toString()); 
builder.setLength(0); 
} 
} catch (MalformedURLException mue) { 
mue.printStackTrace(); 
} catch (IOException ioe) { 
ioe.printStackTrace(); 
} finally { 
try { 
is.close(); 
} catch (IOException ioe) { 
} 
} 
} 

public static void savePage(String fileName, String text) { 
PrintStream out = null; 
try { 
out = new PrintStream(new FileOutputStream(fileName)); 
out.print(text); 
} catch (FileNotFoundException e) { 
e.printStackTrace(); 
} finally { 
if (out != null) 
out.close(); 
} 
} 
+0

我的代码和你非常相似,哈哈..无论如何,谢谢! – Belgarion

2

我需要建立一个简单的网站下载。它将基本查看网站中的链接并递归下载html文件到本地目录。

存在许多用于执行此操作的命令行工具和图形界面工具, wget,但是如果你自己坚持这样做,那么继续阅读。

哪个数据结构最适合这个?我知道我必须实现某种深度优先搜索算法,核心Java中是否有适合我的任务的数据结构库,并且会减少我的编码量? (我对Java非常陌生)谢谢!

数据结构和算法是两个不同的东西。哪种数据结构和算法最适合您的目的取决于您的数据规模和其他因素。如果这是抓取少量链接的小应用程序,则可能需要使用递归方法下载每个页面并解析链接的页面以供下次下载。

对于大规模的网络爬虫,您可能想看看MapReduce和一些分布式存储数据并同时下载它们的方法。

有些工具可能是有用的:

  1. Apache的通用IO,FileUitls.copyURLToFile功能
  2. 阿帕奇共同http-client
  3. Jsoup解析HTML
+0

嗨,谢谢,这是一个编程任务,所以是的,必须自己实施。它的规模很小,只有10个链接在一个网站中,只需递归浏览网站中的链接即可。有没有推荐我使用的数据结构? – Belgarion

+0

我不确定你的数据是什么意思。它是一组链接或文件或目录结构?数组列表应足以让小应用程序存储链接来解析每个文件。其他结构取决于您的要求 – gigadot

+0

这是一组链接,但问题是我不知道如何递归浏览页面以检索这些链接。但我知道我必须使用深度优先搜索算法。 – Belgarion