문제 발생
카카오 지도 api를 이용해서 내가 원하는 지역의 공유 회의실 정보를 가져와 데이터베이스에 저장을 하려고했으나,
url 정보에 해당 회의실의 url이 아닌 카카오맵 url을 리턴해주었다.
예를들어 강남역 토즈를 검색했을때
place_url에 toz.co.kr이 아닌 place.map.kakao.com/17206019 url를 제공해주었다.
문제 해결 시도
그래서 해당 카카오맵 주소로 들어가서 직접 해당 회의실의 url를 크롤링해서 저장하기로했다.
개발자 도구를 열어 해당 태그의 class를 알아내고 크롤링을 해서 db에 해당 링크를 저장하는 코드를 다시 작성했다.
하지만 자꾸 에러가 발생해서 크롤링한 코드를 출력을 해보았더니 내가 개발자 도구에서 본 html 코드에서 많은부분이 생략된 html 코드가 출력되었다.
그래서 왜 이런 문제가 발생하나 찾다가 알게된것이 정적 페이지 크롤링과 정적 페이지 크롤링이다.
정적 페이지
정적 페이지는 서버에 미리 저장된 파일이 그대로 전달되는 페이지이다. 고정된 페이지 이므로, 크롤링을 할때 해당 url 주소만 입력하면 해당 주소의 html 파일을 편하게 크롤링 할수있다.
동적 페이지
동적 페이지는 서버에서 사용자의 요청에 따라 데이터를 가공하여 전달해주는 페이지이다.
따라서 url만으로 크롤링 하는것은 불가능하다.
문제 해결
동적페이지를 크롤링하는데 여러가지 방법이 있지만, 나는 크롬 브라우저를 이용해서 동적페이지를 크롤링 했다.
public class DynamicCrawling {
public String getHomepage(String url){
String homePage="";
// ChromeDriver 경로 설정
System.setProperty("webdriver.chrome.driver", "chromedriver.exe가 저장된 path");
WebDriver driver = new ChromeDriver();
try {
// 웹 페이지 접속
driver.get(url);
Thread.sleep(1000);// 페이지가 로드가 안되고 크롤링을 하면 오류가 발생해서 1초 대기를 시켰다.
List<WebElement> dynamicElements = driver.findElements(By.className("link_homepage"));
if (!dynamicElements.isEmpty()) {
homePage = dynamicElements.get(0).getText();
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
driver.quit();
}
return homePage;
}
}
데이터베이스에 잘 저장이 되었다.
'기타' 카테고리의 다른 글
클라우드 타입 배포하기(spring boot, mysql) - 환경변수 설정 (0) | 2023.08.20 |
---|
댓글