0
특정 URL을 구문 분석하고 allInnerLinks ArrayList의 모든 내부 링크 (동일한 도메인) 및 allExternalLinks ArrayList의 모든 외부 URL을 저장하려고합니다.Jsoup를 사용하여 URL 구문 분석하기 중복 URL이 있습니다.
public void go() {
Document doc;
baseUrl = CountLinks.result3;
try {
// need http protocol
doc = Jsoup
.connect(url)
.userAgent(
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0")
.referrer("http://www.google.com").timeout(1000 * 5)
.ignoreContentType(true).get();
// get page title
String title = doc.title();
// get all links
Elements links = doc.select("a[href]");
for (Element link : links) {
// !!!
// String absUrl = link.absUrl("href");
String absUrl = link.attr("abs:href");
// get the value from href attribute
if (absUrl.contains(baseUrl)
&& !(absUrl.contains("mailto"))) {
allInnerLinks.add(absUrl);
allInnerLinksCounter++;
} else {
allExternalLinks.add(absUrl);
allExternalLinksCounter++;
}
}
} catch (NullPointerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (HttpStatusException e) {
e.printStackTrace();
System.out.println(e.getUrl());
} catch (IOException e) {
e.printStackTrace();
}
}
하지만 마지막에는 중복 요소가 있습니다. 동일한 URL이지만 번호 기호 #가 링크의 끝에 나타납니다. 나는 그것을 얻는 방법을 이해할 수 없다 :
PAGEURL EXTERNAL URLS
----------------------------------------------------------------------------------------
http://hostingmaks.com/category/news/ https://meetings.webex.com/
http://hostingmaks.com/category/news/# https://meetings.webex.com/
왜 그럴까요?
'#'은 하위 섹션과 같이 페이지의 특정 북마크를 나타냅니다. 일부 사이트에서는 텍스트를 사용하여 페이지를 계속 제어 할 수 있습니다 (예 : example.com/#!/somePage'). – Pokechu22
@ Pokechu22 실제로 줄 문자열을 변경하면 absUrl = link.attr ("abs : href"); to 문자열 absUrl = link.attr ("href"); 다음은 # 괜찮습니다. 그러나이 경우 프로그램은 외부 링크로 "/docs/example1.doc"를 참으로 계산합니다. 그래서 "abs : href"(절대 URL)을 사용하지만 대신 중복 된 URL을 사용합니다. – zkvarz