【发布时间】:2013-01-31 10:21:29
【问题描述】:
我正在为我的一门课做作业。
我应该编写一个网络爬虫,从给定指定爬网深度的网站下载文件和图像。
我被允许使用第三方解析 api,所以我使用 Jsoup。我也试过 htmlparser。两个不错的软件,但它们并不完美。
我在处理 url 之前使用 default java URLConnection 来检查内容类型,但随着链接数量的增加,它变得非常慢。
问题:有人知道任何专门的图像和链接解析器 API 吗?
我可以开始使用 Jsoup 编写我的,但我很懒。此外,如果有可行的解决方案,为什么还要重新发明轮子?任何帮助将不胜感激。
我需要在循环遍历链接时检查 contentType 以检查链接是否指向文件,以一种有效的方式,但 Jsoup 没有我需要的内容。这是我所拥有的: **
HttpConnection mimeConn =null;
Response mimeResponse = null;
for(Element link: links){
String linkurl =link.absUrl("href");
if(!linkurl.contains("#")){
if(DownloadRepository.curlExists(link.absUrl("href"))){
continue;
}
mimeConn = (HttpConnection) Jsoup.connect(linkurl);
mimeConn.ignoreContentType(true);
mimeConn.ignoreHttpErrors(true);
mimeResponse =(Response) mimeConn.execute();
WebUrl webUrl = new WebUrl(linkurl,currentDepth+1);
String contentType = mimeResponse.contentType();
if(contentType.contains("html")){
page.addToCrawledPages(new WebPage(webUrl));
}else if(contentType.contains("image")){
page.addToImages(new WebImage(webUrl));
}else{
page.addToFiles(new WebFile(webUrl));
}
DownloadRepository.addCrawledURL(linkurl);
}**
更新 根据 Yoshi 的回答,我能够让我的代码正常工作。这是链接:
【问题讨论】:
-
如果你懒惰检查
wget做同样的事情 -
Java 开发涉及大量研究,为给定的问题领域寻找最佳 API 并使用它来解决您的问题。当然,要偷懒,不要重新发明轮子,但不要懒到不做自己的研究。
标签: java html-parsing jsoup web-crawler