2011-02-07 4 views
1

방금 ​​네트워킹 과제를 시작한 것이므로 이미 막혔습니다. 과제는 사용자가 제공 한 웹 사이트에서 링크를 확인하고 헤더 정보를 읽음으로써 링크가 활성 또는 비활성 상태인지 확인하도록 요청합니다. 지금까지 Google 검색 결과를 얻은 후 웹 사이트를 검색하는 코드가 생겼습니다. 이 정보를 검토하고 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

답장을 보내 주셔서 감사합니다. 사용자가 제공 한 웹 페이지에서 링크를 찾는 데 문제가 있습니다. 모든 링크를 결정한 후에 귀하의 방법을 사용하겠습니다. –

0

NekoHTML 같은 도구를 사용하여 HTML을 구문 분석합니다. 기본적으로 잘못된 형식의 HTML을 수정하여 XML처럼 액세스 할 수 있습니다. 그런 다음 링크 요소를 처리하고 원래 페이지와 마찬가지로 링크 요소를 따라 할 수 있습니다.

일부 sample code that does this을 확인할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다.슬프게도, 과제물에 외부 라이브러리를 사용할 수 없습니다. :-( –

1

나는이 정보를 통해 이동 및 HTML을 찾기 위해 어떻게하지 않습니다는

내가 내 할당에 외부 라이브러리를 사용할 수 없습니다 링크

당신이 몇 가지 옵션 :

1) 웹 페이지를 HTMLDocument로 읽을 수 있습니다. 그런 다음 문서에서 반복기를 가져와 모든 HTML.Tag.A 태그를 찾을 수 있습니다. attrbute 태그를 찾으면 속성 태그의 속성 세트에서 HTML.Attribute.HREF를 가져올 수 있습니다.

2) HTMLEditor.ParserCallback을 확장하고 handleStartTag (...) 메소드를 구현할 수 있습니다. 그러면 A 태그를 찾을 때마다 링크를 다시 포함 할 href 속성을 얻을 수 있습니다. 파서 콜백을 호출하기위한 기본 코드는 다음과 같습니다 또한 jsoup HTML 리트리버와 파서를 시도 할 수 있습니다

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

.

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라는 클래스를 만드는 것입니다 당신이 여기에서 필요로하는 무슨. 그것으로 많은 일을 할 수 있습니다.

관련 문제