YOUNG-JIN.OH
웃어라. 온 세상이 너와 함께 웃을 것이다.
울어라. 너 혼자만 울게 될 것이다.

jsoup 설정 및 Crawling

참고 사이트:

웹 크롤링 (Web Crawling 또는 Web Scraping)은 사이트의 특정 정보를 기계적으로 수집하는 행위를 말합니다. 파이썬에서는 BeautifulSoup를 사용하고 Java에서는 jsoup 라이브러리를 이용하면 됩니다. 앞에서 Selenium으로 했던 크롤링하고는 조금 성격이 다른데 jsoup 과 비교하면 아래와 같습니다.

  • Selenium 은 실제 브라우저를 띄워놓고 화면상에 값을 입력하거나 이벤트 처리(버튼을 누르는 등의 선택)를 하면서 리소스에 접근하는 방식이므로 화면 이동을 하면서 (Javascript 에 대응되는) Crawling을 하면 유용하고, jsoup는 url에서 받아온 데이터를 단순히 Parsing하는 역할을 합니다.
  • Selenium 은 브라우저를 매개로 동작하기 때문에 동적인 화면에 대응하기는 쉽지만 반응 속도가 느립니다. jsoup는 수신된 데이터만을 가지고 작업을 하기 때문에 Selenium 보다 빠릅니다.

따라서 크롤링 작업이 간단한 내용이라면 jsoup를 사용하는 것이 좋습니다. IntelliJ IDEA 에서 비어있는 프로젝트를 만들고 아래와 같이 dependencies를 지정하고 테스트 코드를 작성합니다.

build.gradle

plugins {
    id 'org.springframework.boot' version '2.1.3.RELEASE'
    id 'java'
}

apply plugin: 'io.spring.dependency-management'

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'

    // jsoup(Java HTML Parser)
    // https://jsoup.org
    compile("org.jsoup:jsoup:1.11.3")
}

DemoApplicationTests.java

package com.example.demo;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.io.IOException;

@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {

    @Test
    public void jsoup() {
        Document doc = null;
        try {
            var response = Jsoup.connect("https://www.x1fingers.me/wordpress")
                    .timeout(20000)
                    .execute();

            if (response.statusCode() == 200) {
                doc = response.parse();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println(doc.selectFirst("#profile-name").text());
    }
}

테스트 코드를 실행해보면 정상적으로 사이트의 정보를 가져올 수 있습니다.

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.