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("")); 함수를 사용하여 여러 데이터의 첫번째 데이터가 아닌, 여러 데이터를 가지고 올 수 있게 했다!
음원차트 순위 제목 불러오기 성공!
