2011-02-07 153 views
1

我刚刚开始使用网络分配,并且我已经卡住了。 作业要求我检查用户提供的网站链接,并通过阅读标题信息来确定它们是否处于活动或不活动状态。 到目前为止,谷歌搜索后,我只是有这个代码检索网站。我不知道如何查看这些信息并查找HTML链接。 这里是代码:如何从URL中获取HTML链接

import java.net.*; 
import java.io.*; 

public class url_checker { 
    public static void main(String[] args) throws Exception { 
     URL yahoo = new URL("http://yahoo.com"); 
     URLConnection yc = yahoo.openConnection(); 
     BufferedReader in = new BufferedReader( 
           new InputStreamReader( 
           yc.getInputStream())); 
     String inputLine; 
     int count = 0; 
     while ((inputLine = in.readLine()) != null) { 
      System.out.println (inputLine);     
      }  
     in.close(); 
    } 
} 

请帮忙。 谢谢!

回答

0

我会用像NekoHTML这样的工具解析HTML。它基本上为您修复格式错误的HTML,并允许像XML一样访问它。然后,您可以处理链接元素并尝试按照原来的页面进行操作。

您可以查看一些sample code that does this

+0

感谢您的回复。可悲的是,我不能在我的作业上使用任何外部库。 :-( – 2011-02-07 02:28:31

1

我不明白如何去在这个信息,寻找HTML链接

我不能在我的分配使用任何外部库

你有两个选择:

1)您可以将网页读入HTMLDocument。然后你可以从Document获得一个迭代器来找到所有的HTML.Tag.A标签。一旦找到attrbute标签,就可以从attribute标签的属性集中获取HTML.Attribute.HREF。

2)您可以扩展HTMLEditor.ParserCallback并实现handleStartTag(...)方法。然后,每当你找到一个A标签时,你可以得到href属性,它将再次包含链接。调用解析器回调的基本代码是:

MyParserCallback parser = new MyParserCallback(); 

// simple test 
String file = "<html><head><here>abc<div>def</div></here></head></html>"; 
StringReader reader = new StringReader(file); 

// read a page from the internet 
//URLConnection conn = new URL("http://yahoo.com").openConnection(); 
//Reader reader = new InputStreamReader(conn.getInputStream()); 

try 
{ 
    new ParserDelegator().parse(reader, parser, true); 
} 
catch (IOException e) 
{ 
    System.out.println(e); 
} 
2

您还可以尝试jsoup html检索器和解析器。

Document doc = Jsoup.parse(new URL("<url>"), 2000); 

Elements resultLinks = doc.select("div.post-title > a"); 
for (Element link : resultLinks) { 
    String href = link.attr("href"); 
    System.out.println("title: " + link.text()); 
    System.out.println("href: " + href); 
}  

通过此代码,您可以列出并分析div中的所有元素,其中包含来自url的“post-title”类。

2

你可以试试这个:

URL url = new URL(link); 
Reader reader= new InputStreamReader((InputStream) url.getContent()); 
new ParserDelegator().parse(reader, new Page(), true); 

然后创建一个名为页

class Page extends HTMLEditorKit.ParserCallback { 

    public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos) { 
     if (t == HTML.Tag.A) { 
      String link = null; 
      Enumeration<?> attributeNames = a.getAttributeNames(); 
      if (attributeNames.nextElement().equals(HTML.Attribute.HREF)) 
       link = a.getAttribute(HTML.Attribute.HREF).toString(); 
      //save link some where 
     } 
    } 
} 
1

HtmlParser类是什么您这里需要。很多事情都可以用它来完成。