크롤링을 해온 데이터를 리스트에 담아 컨트롤러 -> 서비스 -> 레파지토리까지 넘겨주고 DB로 INSERT를 시도했다.
ArrayIndexOutOfBoundsException
"switch문을 작성할 때 case는 여러 개가 나와도 상관없다. break라는 것은 보조제어문 중 하나이다. 위에 설명한 것처럼 조건에 해당하는 실행문만 실행시키고 종료시키기 위해서 사용된다." - 구글링
String imageUrl = "";
List<WebElement> imageElements = driver.findElements(By.cssSelector("div.K0PDV._div"));
// List<String> imageUrls = new ArrayList<>();
for (int i = 0; i < imageElements.size(); i++) {
WebElement imageElement = imageElements.get(i);
String styleAttribute = imageElement.getAttribute("style");
// 스타일 속성에서 URL 추출
imageUrl = extractImageUrlFromStyleAttribute(styleAttribute);
// imageUrls.add(i, imageUrl);
switch (i) {
case 0:
cafe.setCafeImgUrl1(imageUrl);
break;
case 1:
cafe.setCafeImgUrl2(imageUrl);
break;
case 2:
cafe.setCafeImgUrl3(imageUrl);
break;
case 3:
cafe.setCafeImgUrl4(imageUrl);
break;
case 4:
cafe.setCafeImgUrl5(imageUrl);
break;
}
System.out.println("Image URL: " + imageUrl);
}
cafe.setName(key);
cafe.setAddress(address);
cafe.setPhoneNum(phoneNumber);
cafe.setBusinessHours(businessHours);
cafe.setFacilities(facilities);
// cafe.setCafeImgUrl1(imageUrls.get(0)); // Cafe 객체에 이미지 URL 리스트 설정
// cafe.setCafeImgUrl2(imageUrls.get(1));
// cafe.setCafeImgUrl3(imageUrls.get(2));
// cafe.setCafeImgUrl4(imageUrls.get(3));
// cafe.setCafeImgUrl5(imageUrls.get(4));
cafes.add(cafe);
public void saveCafeDataFromWebCrawler(List<Cafe> cafes) {
for (Cafe cafe : cafes) {
// 크롤링으로 들어오는 카페 이름으로 DB에 몇개들어있는지 SELECT하고, 몇개인지 받아온다
int count = cafeRepository.countDuplicateCafeName(cafe.getName());
// 만약 0개면 INSERT시키러 레파지토리로 데이터를 넘겨준다
if (count == 0) {
cafeRepository.insertCafe(cafe);
}
}
}
@Select("""
SELECT COUNT(name)
FROM cafe
WHERE name = #{name}
""")
public int countDuplicateCafeName(String name);
@Insert("""
INSERT INTO
cafe SET
regDate = NOW(),
updateDate = NOW(),
name = #{name},
address = #{address},
businessHours = #{businessHours},
phoneNum = #{phoneNum},
facilities = #{facilities},
cafeImgUrl1 = #{cafeImgUrl1},
cafeImgUrl2 = #{cafeImgUrl2},
cafeImgUrl3 = #{cafeImgUrl3},
cafeImgUrl4 = #{cafeImgUrl4},
cafeImgUrl5 = #{cafeImgUrl5},
goodReactionPoint = #{goodReactionPoint},
reviewCount = #{reviewCount},
hashtag = #{hashtag}
""")
public void insertCafe(Cafe cafe);