동적으로 웹 크롤링하기
1. build.gradle
을 설정해준다
implementation group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '4.9.0'
2. 크롤링해올 페이지에 대한 클래스를 작성한다
@Component
public class MovieCrawlingController {
private WebDriver driver;
private static final String url = "크롤링할 주소";
public void process() {
System.setProperty("webdriver.chrome.driver", "chromedriver.exe가 있는 경로 설정");
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
driver = new ChromeDriver(options);
try {
getDataList();
} catch (InterruptedException e) {
e.printStackTrace();
Thread.currentThread().interrupt();
} catch (IOException e) {
throw new RuntimeException(e);
}
driver.close();
driver.quit();
}
private List<String> getDataList() throws InterruptedException, IOException {
List<String> list = new ArrayList<>();
driver.get(url);
Thread.sleep(2000);
WebElement lis = driver.findElement(By.cssSelector(""));
images.click();
Thread.sleep(2000);
String title = titleElement.getText();
String image = imageElement.getAttribute("src");
driver.navigate().back();
Thread.sleep(2000);
return list;
}
}
함수명 | 설명 |
---|
By.id | 요소의 속성 id로 찾는 오브젝트를 찾습니다. |
By.className | 요소의 속성 class가 포함된 오브젝트를 찾습니다. |
By.name | 요소의 속성 name로 찾는 오브젝트를 찾습니다. |
By.xpath | xpath를 이용해서 오브젝트를 찾습니다. |
By.linkText | 하이퍼 링크의 텍스트로 오브젝트를 찾습니다.(완전 일치) - 탐색이 잘 안됩니다. |
By.partialLinkText | 하이퍼 링크의 텍스트로 오브젝트를 찾습니다.(포함) - 탐색이 잘 안됩니다. |
By.tagName | 요소의 태그 이름으로 찾습니다. |
By.cssSelector | css selector(sizzle)로 오브젝트를 찾습니다. |
3. 실행시킬 클래스를 작성한다.
@Component
@Getter
public class CrawlingClass {
private final MovieCrawlingController movieCrawlingController;
private final TvCrawlingController tvCrawlingController;
@Autowired
public CrawlingClass(MovieCrawlingController movieCrawlingController,
TvCrawlingController tvCrawlingController) {
this.movieCrawlingController = movieCrawlingController;
this.tvCrawlingController = tvCrawlingController;
System.out.println("-------------MOVIE---------------");
movieCrawlingController.process();
}
}