웹 스크래퍼
- Java에서 웹 스크래핑용 라이브러리 선택: Jsoup, Selenium, HtmlUnit 등과 같이 Java에서 웹 스크래핑에 사용할 수 있는 여러 라이브러리가 있습니다. 요구 사항에 따라 이러한 라이브러리 중 하나를 선택할 수 있습니다.
- HTML 콘텐츠 가져오기: 라이브러리를 선택하면 HTTP 요청을 보내 웹 페이지의 HTML 콘텐츠를 가져올 수 있습니다.
- HTML 콘텐츠 구문 분석: HTML 콘텐츠를 가져온 후 이를 구문 분석하여 필요한 정보를 추출할 수 있습니다. HTML 콘텐츠의 구조에 따라 CSS 선택자, XPath 등 다양한 파싱 기법을 사용할 수 있습니다.
- 추출된 정보 저장: 마지막으로 추출된 정보를 CSV 파일, 데이터베이스 등과 같은 구조화된 형식으로 저장할 수 있습니다.
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class WebScraper {
public static void main(String[] args) throws Exception {
Document document = Jsoup.connect("https://example.com").get(); Elements links =
document.select("a[href]");
for (Element link : links) {
System.out.println("Link: " + link.attr("href"));
System.out.println("Text: " + link.text());
}
}
}
웹 크롤러
import java.io.IOException;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Set;
import java.util.HashSet;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class WebCrawler {
private static final int MAX_PAGES_TO_SEARCH = 10;
private Set<String> pagesVisited = new HashSet<String>();
private Queue<String> pagesToVisit = new LinkedList<String>();
/**
* Returns the HTML content of a URL as a Document object
*/
private Document getHtmlDocument(String url) throws IOException {
return Jsoup.connect(url).get();
}
/**
* Returns all the links (URLs) on a page
*/
private void search(String url) throws IOException {
Document htmlDocument = getHtmlDocument(url);
Elements linksOnPage = htmlDocument.select("a[href]");
System.out.println("**Visiting** Received web page at " + url);
for (Element link : linksOnPage) {
String linkUrl = link.absUrl("href");
if (!pagesVisited.contains(linkUrl) && pagesVisited.size() < MAX_PAGES_TO_SEARCH) {
pagesToVisit.add(linkUrl);
}
}
}
public void crawl() throws IOException {
while (!pagesToVisit.isEmpty() && pagesVisited.size() < MAX_PAGES_TO_SEARCH) {
String nextUrl = pagesToVisit.poll();
if (!pagesVisited.contains(nextUrl)) {
search(nextUrl);
pagesVisited.add(nextUrl);
}
}
System.out.println("\n**Done** Visited " + pagesVisited.size() + " web page(s)");
}
public static void main(String[] args) throws IOException {
WebCrawler crawler = new WebCrawler();
crawler.pagesToVisit.add("https://www.example.com/");
crawler.crawl();
}
}
이 코드는 큐와 세트를 사용하여 각각 방문할 링크와 이미 방문한 링크를 추적합니다.
Jsoup 라이브러리는 웹 페이지의 HTML 콘텐츠를 가져오고 이를 구문 분석하여 링크를 추출하는 데 사용됩니다.
코드는 큐에 루트 URL을 추가하고 방문한 것으로 표시하는 것으로 시작합니다.
그런 다음 크롤링 방법은 반복적으로 대기열에서 URL을 가져오고 HTML 콘텐츠를 가져오고 대기열에 새 링크를 추가합니다.
크롤링의 깊이는 MAX_DEPTH 상수에 의해 제어되며 프로세스가 반복되는 최대 횟수를 지정합니다.
'JAVA' 카테고리의 다른 글
AXON Framework 구현 방법 (1) | 2023.02.24 |
---|---|
JAVA applicationEventPublisher로 순환참조 해결! (0) | 2023.02.13 |
JAVA SE vs JAVA EE 개념 (0) | 2022.07.25 |
서블릿(Servlet)이 뭐지..? (0) | 2022.07.22 |
Spring Web Application 구동 (0) | 2022.07.21 |