我正在为我的一个班级做作业。
我应该编写一个webcrawler,从给定指定爬网深度的网站下载文件和图像。
我被允许使用第三方解析api所以我使用 Jsoup 。我也试过 htmlparser 。两个不错的软件,但它们并不完美。
我在处理网址之前使用默认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的回答,我能够让我的代码正常工作。这是链接:
答案 0 :(得分:3)
使用jSoup我认为此API足以满足您的需求。你也可以在这个网站上找到好的食谱。
几个步骤:
你不需要使用URLConnection类,jSoup有它的包装。
<强> e.g 强>
您只能使用一行代码来获取DOM对象:
Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
而不是这段代码:
URL oracle = new URL("http://www.oracle.com/");
URLConnection yc = oracle.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(
yc.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
<强> UPDATE1 强> 尝试在下一行添加代码:
Connection.Response res = Jsoup.connect("http://en.wikipedia.org/").execute();
String pageContentType = res.contentType();