
Crawling
웹 페이지를 그대로 가져와서 거기서 데이터를 추출해 내는 행위
Selenium
웹 애플리케이션 자동화 및 테스트를 위한 포터블 프레임워크
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.9.0</version>
</dependency>
https://chromedriver.chromium.org/downloads
여기서 본인 크롬 버전 확인 후 해당하는 드라이버를 설치
크롤링하여 저장할 항목들로 DTO 클래스 생성
import java.util.List;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
public class CrawlingDTO {
private String data;
private String img;
private List<CrawlingDTO> list;
}
F12 또는ex)
driver.findElements(By.className("DataSet") //클래스명
driver.findElements(By.tagName("li")) //태그명
@Controller
public class CrawlingController {
@GetMapping("/crawling")
public ResponseEntity<Integer> crawling(HttpServletRequest request){
List<CrawlingDTO> list = new ArrayList<>();
String WEB_DRIVER_ID = "webdriver.chrome.driver";
String WEB_DRIVER_PATH = "C:\\chromedriver-win32\\chromedriver.exe";
System.setProperty(WEB_DRIVER_ID, WEB_DRIVER_PATH);
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
options.addArguments("headless");
WebDriver driver = new ChromeDriver(options);
try {
driver.get("https://www"); //크롤링할 사이트의 url
for(WebElement element : driver.findElements(By.className("DataSet"))){
String data = element.getText();
WebElement imgs = element.findElement(By.tagName("img"));
String img = imgs.getAttribute("src");
CrawlingDTO dto = new CrawlingDTO();
dto.setData(data);
dto.setImg(img);
list.add(dto);
}
return ResponseEntity.ok(1);
} catch (Exception e) {
e.printStackTrace();
return ResponseEntity.ok(0);
} finally {
driver.close();
}
}
너무 대충적었당