2011-02-07 19 views
1

私は自分のネットワーク割り当てを開始していますが、私はすでに立ち往生しています。 割り当ては、ユーザー提供のWebサイトでリンクを確認し、ヘッダー情報を読むことによって、リンクがアクティブか非アクティブかを判断するように要求します。 これまでのところ、グーグルの後、私はちょうどウェブサイトを取得するこのコードを持っています。私はこの情報を調べて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

サーバーが返されたHTTPステータスコードを取得する必要があります。ページが存在しない場合、サーバーは404を返します。

はこれをチェックしてください: http://download.oracle.com/javase/1.4.2/docs/api/java/net/HttpURLConnection.html

最も具体的にgetResponseCode方法。

+0

返信いただきありがとうございます!ユーザーが提供するWebページ上のリンクを検索する際に問題があります。私はすべてのリンクを決定した後、あなたの方法を使用します。 –

0

NekoHTMLのようなツールでHTMLを解析します。基本的には不正な形式のHTMLを修正し、XMLのようにアクセスすることができます。その後、元のページのようにリンク要素を処理し、それに従うことができます。

sample code that does thisをチェックアウトすることができます。

+0

返信いただきありがとうございます。悲しいことに、私は自分の課題に外部の図書館を使うことはできません。 :-( –

1

私はこの情報の上に移動して、HTMLを探すためにどのように得ることはありませんが

が、私は私の割り当て上の任意の外部ライブラリを使用することはできませんリンク

あなたは持っているオプションのカップル:

1)WebページをHTMLDocumentに読み込むことができます。次に、ドキュメントからすべてのHTML.Tag.Aタグを見つけるためにイテレータを取得できます。 attrbuteタグを見つけたら、属性タグの属性セットから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); 
}  

このコードでは、URLのクラス「post-title」を持つdiv内のすべての要素をリストして分析できます。

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と呼ばれるクラスを作成しているあなたがここに必要なもの。それを使って多くのことを行うことができます。