728x90
반응형

jsoup 라이브러리를 사용하여, 특정 홈페이지(웹페이지)내에 존재하는 links를 헤아려보는 샘플 프로그램을 작성 및 수행해 보았습니다.

 

jsoup은 1.16.2 버전을 사용하였습니다.

<dependency>
			<!-- jsoup HTML parser library @ https://jsoup.org/ -->
			<groupId>org.jsoup</groupId>
			<artifactId>jsoup</artifactId>
			<version>1.16.2</version>
</dependency>

 

Text Console 프로그램을 아래와 같이 작성해 보았습니다.

package kr.pe.speech.jsoup;

import org.jsoup.Jsoup;
import org.jsoup.helper.Validate;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.io.IOException;

@SpringBootApplication
public class JsoupApplication {

	public static void main(String[] args) throws IOException {
		Validate.isTrue(args.length == 1, "Usage: supply url to fetch");


		String url = args[0];
		print("Fetching %s...", url);

		Document doc = Jsoup.connect(url).get();
		Elements links = doc.select("a[href]");
		Elements media = doc.select("[src]");
		Elements imports = doc.select("link[href]");

		print("\nLinks: (%d)", links.size());
		for (Element link : links) {
			print(" * a: <%s>  (%s)", link.attr("abs:href"), trim(link.text(), 35));
		}
	}

	private static void print (String msg, Object...args){
		System.out.println(String.format(msg, args));
	}

	private static String trim (String s,int width){
		if (s.length() > width)
			return s.substring(0, width - 1) + "...";
		else
			return s;
	}
}

 

 

 

 

 

출력결과는 아래와 같습니다.

  • 프로그램 코드가 간력합니다
  • 수행속도가 타 라이브러리보다 엄청 빠릅니다.
  • API Method가 간단 명료한 느낌입니다.
  • 중복된 URL을 출력합니다.   

 

 

Fetching http://speech.pe.kr...

Links: (37)
 * a: <http://speech.pe.kr#site-content>  (Skip to the content)
 * a: <http://speech.pe.kr/>  (speech voice AI)
 * a: <http://speech.pe.kr/>  (홈)
 * a: <http://speech.pe.kr/%ec%86%8c%ea%b0%9c/>  (소개)
 * a: <http://speech.pe.kr/%eb%b8%94%eb%a1%9c%ea%b7%b8/>  (블로그)
 * a: <http://speech.pe.kr/%eb%ac%b8%ec%9d%98/>  (문의)
 * a: <http://speech.pe.kr/plans/>  (Plans)
 * a: <http://speech.pe.kr#weglot_switcher>  (Weglot Switcher)
 * a: <http://speech.pe.kr/>  (홈)
 * a: <http://speech.pe.kr/%ec%86%8c%ea%b0%9c/>  (소개)
 * a: <http://speech.pe.kr/%eb%b8%94%eb%a1%9c%ea%b7%b8/>  (블로그)
 * a: <http://speech.pe.kr/%eb%ac%b8%ec%9d%98/>  (문의)
 * a: <http://speech.pe.kr/>  (홈)
 * a: <http://speech.pe.kr/%ec%86%8c%ea%b0%9c/>  (소개)
 * a: <http://speech.pe.kr/%eb%b8%94%eb%a1%9c%ea%b7%b8/>  (블로그)
 * a: <http://speech.pe.kr/%eb%ac%b8%ec%9d%98/>  (문의)
 * a: <http://speech.pe.kr/plans/>  (Plans)
 * a: <http://speech.pe.kr#weglot_switcher>  (Weglot Switcher)
 * a: <https://www.yelp.com>  (옐프)
 * a: <https://www.facebook.com/wordpress>  (페이스북)
 * a: <https://twitter.com/wordpress>  (트위터)
 * a: <https://www.instagram.com/explore/tags/wordcamp/>  (인스타그램)
 * a: <mailto:wordpress@example.com>  (이메일)
 * a: <http://speech.pe.kr#post-inner>  (Scroll Down)
 * a: <https://make.wordpress.org/core/2019/09/27/block-editor-theme-related-updates-in-wordpress-5-3/>  (Read More)
 * a: <https://make.wordpress.org/core/2019/09/27/block-editor-theme-related-updates-in-wordpress-5-3/>  (Read More)
 * a: <https://make.wordpress.org/core/2019/09/27/block-editor-theme-related-updates-in-wordpress-5-3/>  (Read More)
 * a: <https://make.wordpress.org/core/2019/09/27/block-editor-theme-related-updates-in-wordpress-5-3/>  (Read More)
 * a: <https://make.wordpress.org/core/2019/09/27/block-editor-theme-related-updates-in-wordpress-5-3/>  (Join the Club)
 * a: <https://www.yelp.com>  (옐프)
 * a: <https://www.facebook.com/wordpress>  (페이스북)
 * a: <https://twitter.com/wordpress>  (트위터)
 * a: <https://www.instagram.com/explore/tags/wordcamp/>  (인스타그램)
 * a: <mailto:wordpress@example.com>  (이메일)
 * a: <http://speech.pe.kr/>  (speech voice AI)
 * a: <https://wordpress.org/>  (Powered by WordPress)
 * a: <http://speech.pe.kr#site-header>  (To the top ↑ Up ↑)


728x90
반응형

+ Recent posts