JAVA

[JAVA] 간단한 크롤링 구현

meetyou 2023. 5. 17. 09:40

이번에는 간단한 크롤링을 구현해 보겠습니다.

 

1. 구글 버전에 따른 크로미움 설치!

아래의 그림에 적힌 순서에 따라 구글 버전을 먼저 확인해줍니다.

 

아래의 사이트에서 해당 버전을 설치해줍니다!

(참고* m1은 arm64를 설치해주시면 됩니다)

https://chromedriver.chromium.org/downloads

 

ChromeDriver - WebDriver for Chrome - Downloads

Current Releases If you are using Chrome version 114, please download ChromeDriver 114.0.5735.16 If you are using Chrome version 113, please download ChromeDriver 113.0.5672.63 If you are using Chrome version 112, please download ChromeDriver 112.0.5615.49

chromedriver.chromium.org

 

2. 의존성 추가

셀레니움 최근 버전 확인

아래의 사이트에 접속 후 가장 최신 버전으로 의존성 주입

https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java

 

제가 작성한 일자 기준 4.9가 가장 최신 버전이여서 아래와 같이 추가해주었습니다.

아래의 내용을 build.gradle에 추가해줍니다.

implementation group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '4.9.1'

 

3. 아래의 코드 입력

아래의 코드를 입력하면 https://meetyougo.tistory.com/ 사이트에서의 

tags라는 클래스 이름을 가진 태그 안에 들어 있는 a태그의 내용들을 가져올수 있습니다.

<div class="tags">

    <a>리액트</a>

     .... 

</div>

public class CrawlingTest {
    
    public static final String DRIVER_ID = "webdriver.chrome.driver"; //드라이버 ID
	public static final String DRIVER_PATH = "크로미움 설치 경로"; //드라이버 경로
	
	public static void main(String[] args) {
		//드라이버 설정
		try {
			System.setProperty(DRIVER_ID, DRIVER_PATH);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		//크롬 설정을 해주기 위한 클래스
		ChromeOptions options = new ChromeOptions();

		options.addArguments("headless"); // 브라우저 창이 열리지 않고 백그라운드에서 실행
		options.addArguments("--remote-allow-origins=*"); // Chrome 브라우저에 원격에서 접근 가능하도록 설정
		
		// Chrome 브라우저를 제어하기 위한 클래스
		ChromeDriver driver = new ChromeDriver(options);
		
		// 빈 탭 생성
        driver.executeScript("window.open('about:blank','_blank');");

		//이동을 원하는 url
		String url = "https://meetyougo.tistory.com";
        
		//WebDriver을 해당 url로 이동한다.
		driver.get(url);
		
		//브라우저 이동시 생기는 로드시간을 기다린다.
		//HTTP응답속도보다 자바의 컴파일 속도가 더 빠르기 때문에 임의적으로 1초를 대기한다.
		try {Thread.sleep(1000);} catch (InterruptedException e) {}
		
		WebElement element1 = driver.findElement(By.className("tags"));

		// div 태그안에 클래스 이름이 'tags'인 a태그를 가진 모든 element를 받아온다.
		List<WebElement> element2 = element1.findElements(By.tagName("a"));
		
		int count = 0;
		for (int i = 0; i < element2.size(); i++) {
			System.out.println(++count + "번 태그: "+ element2.get(i).getText());
		}
		
		try {
			//드라이버가 null이 아니라면
			if(driver != null) {
				//드라이버 연결 종료
				driver.close(); //드라이버 연결 해제
				
				//프로세스 종료
				driver.quit();
			}
		} catch (Exception e) {
			throw new RuntimeException(e.getMessage());
		}
    }
}

추가 참고 설명 : 

* options.addArguments("headless");는 Chrome 브라우저를 Headless 모드로 실행하도록 옵션을 추가하는 코드입니다. Headless 모드에서는 브라우저 창이 열리지 않고, 백그라운드에서 실행됩니다. 이는 웹 애플리케이션의 성능을 테스트하거나 크롤링을 할 때 유용합니다.

* options.addArguments("--remote-allow-origins=*");는 Chrome 브라우저에 원격에서 접근 가능하도록 설정하는 코드입니다. 이렇게 원격으로 Chrome 브라우저를 제어하면, 여러 대의 컴퓨터나 브라우저에서 자동화 테스트를 수행할 수 있습니다.