2016-10-27 4 views
1

나는 잘 작동하는 콘텐츠 문자열에서 모든 URL 링크를 구문 분석하는 데 jsoup를 사용합니다.Jsoup : URL 별도로 구문 분석

URL과 내용 문자열의

부분, 당신은 링크 텍스트 이후에 제공되는 참조로 : "거울" "다운로드 지침"및 "추가 :"

<u>Download Instructions:</u><br/> 
<a class="postlink" href="https://test.com/info">https://test.com/info</a> 
<br/>Mirror:<br/> 
<a class="postlink" href="http://global.eu/navi.html">http://global.eu/navi.html</a> 
<br/>Additional:<br/> 
<a class="postlink" href="http://main.org/navi.html">http://main.org/navi.html</a> 

이제 내 목표는 텍스트 후 "다운로드 지침 : 및 텍스트 "미러 : "별도로 후 모든 URL을 구문 분석하려면"추가 "는 무시해야합니다.

아래 코드 조각은 모두 구문 분석 만하고 (url) arraylist에 추가합니다.

int j = 0; 
Document doc = Jsoup.parse(content); 
Elements links = doc.select("a.postlink"); 
for (Element el : links) { 
    String urlman = el.attr("abs:href"); 
    if (urlman != null) { 
     url.add(j, urlman); 
     j++; 
    } 
} 

누군가가 도움을 줄 수 있다면 좋을 것입니다.

미리 감사드립니다.

답변

1

게시 된 구조를 기반으로 이전 형제 노드를 검사하여 앵커를 설명하는 노드 (여기서 #text 또는 <u> 태그)를 찾을 수 있습니다. 그런 다음 간단히 String 비교 형식을 수행하십시오.

예제 코드

String source = "<u>Download Instructions:</u><br/><a class=\"postlink\" href=\"https://1test.com/info\">https://test.com/info</a><br/><a class=\"postlink\" href=\"https://2test.com/info\">https://test.com/info</a><br/><a class=\"postlink\" href=\"https://3test.com/info\">https://test.com/info</a><br/>Mirror:<br/><a class=\"postlink\" href=\"http://global.eu/navi1.html\">http://global.eu/navi.html</a><br/><a class=\"postlink\" href=\"http://global.eu/navi2.html\">http://global.eu/navi.html</a><br/>Additional:<br/><a class=\"postlink\" href=\"http://main.org/navi.html\">http://main.org/navi.html</a>"; 

Document doc = Jsoup.parse(source, "UTF-8"); 

List<String> downloadInstructionsUrls = new ArrayList<>(); 
List<String> mirrorUrls = new ArrayList<>(); 

for (Element el : doc.select("a.postlink")) { 
    Node previousSibling = el.previousSibling(); 

    while(!(previousSibling.nodeName().equals("u") || previousSibling.nodeName().equals("#text"))){ 
     previousSibling = previousSibling.previousSibling(); 
    } 

    String identifier = previousSibling.toString(); 

    if(identifier.contains("Download Instructions")){ 
     downloadInstructionsUrls.add(el.attr("abs:href")); 
    }else if(identifier.toString().contains("Mirror")){ 
     mirrorUrls.add(el.attr("abs:href")); 
    } 
} 

System.out.println("Url for download instructions:"); 
downloadInstructionsUrls.forEach(url -> {System.out.println("\t"+url);}); 
System.out.println("Url for mirror:"); 
mirrorUrls.forEach(url -> {System.out.println("\t"+url);}); 

출력

Url for download instructions: 
    https://1test.com/info 
    https://2test.com/info 
    https://3test.com/info 
Url for mirror: 
    http://global.eu/navi1.html 
    http://global.eu/navi2.html 
+0

이 큰 프레드릭, 당신의 노력에 대한 많은 들으이다. – Simon

+0

@ Simon "여러 항목 일 수 있습니다"부분이 아직 충족되지 않았으며 1 ~ 2 분 후에 업데이트가 게시됩니다. –

+0

Thx 사전에. – Simon