2024-03-10 - 셀레니움(Selenium)으로 크롤링하기 (feat.멜론)

·2024년 3월 10일

프로젝트

목록 보기
23/57

📅 2024-03-10


멜론 사이트 TOP100 크롤링 해오기

 public void crawl() {
        // 크롬 드라이버 경로 설정 (크롬 드라이버 설치 필요)
        System.setProperty("webdriver.chrome.driver", "C:/work/chromedriver.exe");

        // 크롬 옵션 설정
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--headless"); // 브라우저를 표시하지 않고 실행할 경우

        // 웹 드라이버 초기화
        WebDriver driver = new ChromeDriver(options);

        try {
            // 크롤링할 웹 페이지 URL
            String url = "https://www.melon.com/chart/index.htm";
            // 웹 페이지 열기
            driver.get(url);

            // 특정 요소 찾기 (예: id가 "someId"인 요소)
            WebElement element = driver.findElement(By.xpath("//*[@id=\"lst50\"]/td[6]/div/div/div[1]"));

            // 요소에서 텍스트 가져오기
            String text = element.getText();
            System.out.println("TOP100: " + text);

            // 파일에 텍스트 저장
            saveToFile(text, "output.txt");

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 웹 드라이버 종료
            driver.quit();
        }
    }

    private void saveToFile(String text, String fileName) throws IOException {
        FileWriter writer = new FileWriter(fileName);
        writer.write(text);
        writer.close();
        System.out.println("데이터를 파일에 저장했습니다.");
    }

    public static void main(String[] args) {
        WebCrawler webCrawler = new WebCrawler();
        webCrawler.crawl();
    }

copy xpath해서 원하는 요소를 크롤링해오려고 하니 안됐다! chatGPT한테 물어봤더니 cssSelector을 사용해서 찾아보는 방법도 있다고 했다!

  public void crawl() {
        // 크롬 드라이버 경로 설정 (크롬 드라이버 설치 필요)
        System.setProperty("webdriver.chrome.driver", "C:/work/chromedriver.exe");

        // 크롬 옵션 설정
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--headless"); // 브라우저를 표시하지 않고 실행할 경우

        // 웹 드라이버 초기화
        WebDriver driver = new ChromeDriver(options);

        try {
            // 크롤링할 웹 페이지 URL
            String url = "https://www.melon.com/chart/index.htm";
            // 웹 페이지 열기
            driver.get(url);

            // TOP 100 곡을 담고 있는 요소들 찾기
            List<WebElement> elements = driver.findElements(By.cssSelector(".lst50, .lst100")); // TOP 50 과 TOP 100 곡을 모두 포함하는 클래스 선택자
            // 결과를 파일에 저장
            saveToFile(elements, "output.txt");

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 웹 드라이버 종료
            driver.quit();
        }
    }

    private void saveToFile(List<WebElement> elements, String fileName) throws IOException {
        FileWriter writer = new FileWriter(fileName);
        for (WebElement element : elements) {
            String title = element.findElement(By.cssSelector(".ellipsis.rank01")).getText();
            writer.write(title + "\n");
        }
        writer.close();
        System.out.println("데이터를 파일에 저장했습니다.");
    }

    public static void main(String[] args) {
        WebCrawler2 webCrawler = new WebCrawler2();
        webCrawler.crawl();
    }
}

cssSelector을 사용하고, driver.findElements(By.cssSelector("")); 함수를 사용하여 여러 데이터의 첫번째 데이터가 아닌, 여러 데이터를 가지고 올 수 있게 했다!
음원차트 순위 제목 불러오기 성공!

profile
hello world

0개의 댓글