2012-07-11 3 views
0

내 프로그램이 내 단일 결과 페이지로 이동하여 모든 링크를 찾아 파일에 저장합니다. 그런 다음 파일을 읽고 필수 링크가 포함 된 행만 복사하여 다른 파일에 저장합니다. 그리고 나는이 작업을 수행하는 파일을 생성하지 않으려는 다시 필요 추출하는 데이터파일 io를 대체 할 Java 데이터 구조

public class net { 

    public static void main(String[] args) throws Exception { 
     Document doc = Jsoup.connect("http://jntuconnect.net/results_archive/").get(); 

     Elements links = doc.select("a"); 
     File f1 = new File("flink.txt"); 
     File f2 = new File("rlink.txt"); 

      //write extracted links to f1 file 
     FileUtils.writeLines(f1, links); 

      // store each link from f1 file in string list 
     List<String> linklist = FileUtils.readLines(f1); 

      // second string list to store only required link elements 
     List<String> rlinklist = new ArrayList<String>(); 

     // loop which finds required links and stores in rlinklist 
     for(String elem : linklist){ 
      if(elem.contains("B.Tech") && (elem.contains("R07")||elem.contains("R09"))){ 
       rlinklist.add(elem);     
      }   
     }   
     //store required links in f2 file 
     FileUtils.writeLines(f2, rlinklist); 

     // parse links from f2 file 
     Document rdoc = Jsoup.parse(f2, null); 
     Elements rlinks = rdoc.select("a"); 

     // for storing hrefs and link text 
     List<String> rhref = new ArrayList<String>(); 
     List<String> rtext = new ArrayList<String>(); 

     for(Element rlink : rlinks){ 
      rhref.add(rlink.attr("href")); 
      rtext.add(rlink.text()); 
     } 

    }// end main 

} 

을 구문 분석합니다. 파일을 만들지 않고 특정 URL 만 href 및 링크 텍스트를 얻는 더 좋은 방법이 있습니까?

Elements links = doc.select("a"); 
List<String> linklist = new ArrayList<String>(); 
for (Element elt : links) { 
    linklist.add(elt.toString()); 
} 

두 번째 왕복, 내가 코드를 이해하는 경우에 만들어진 것입니다 :

그것은

+0

이미 목록을 가지고 있습니다 ('Elements links'). 그냥 조작하십시오. 파일에서 읽고 쓰는 코드는 완전히 불필요합니다. – vanza

답변

1
여기

첫 번째 파일 쓰기를 제거하는 방법입니다 읽기/아파치 평민 fileutils에 속하는 명령어, jsoup을 사용 특정 테스트를 충족하는 링크를 추출하십시오. 같은 기술을 사용하여 메모리에서 할 수 있습니다.

Jsoup.parse에 의존하여 선택된 링크에서 href와 링크 텍스트를 추출하는 것을 보았습니다. 선택된 노드를 StringBuffer에 작성하고 메서드를 호출 한 다음 인수 대신 String을 사용하는 Jsoup.parse 메서드 중 하나를 사용하여 String으로 변환하여 메모리에서 수행 할 수 있습니다.

관련 문제