낭만 프로그래머
CentOS 7 에서 자바 와 셀레니움을 사용하여 웹 크롤링 하기 본문
웹 크롤링을 하다가 보면 페이지가 로딩되기 전에 소스를 가져옴에 따라 원하는 데이터를 추출할 수 없는 경우가 있다. 단적인 예로 구글맵이 되겠다. 아마 자바스크립트로 비동기 방식으로 엘리먼트들을 구성해서 그렇지 않나 싶다.
때문에 셀레니움을 사용하자. 즉 크롬 또는 다른 웹브라우저를 이용하여 로딩될때 까지 시간을 가진 다음 소스를 가져오는 방식이다.
1. 크롬 설치
1.1 Yum 을 위한 repo 파일 생성
$ vi /etc/yum.repos.d/google-chrome.repo
[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/x86_64
enabled=1
gpgcheck=0
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
1.2 크롬 설치
$ yum install google-chrome-stable
1.3 크롬 버전 확인
: 크롬 버전과 크롬드라이버 버전이 맞아야 하기 때문에 확인 해야 한다
$ google-chrome --version
2. 크롬 드라이버 설치
2.1 크롬 드라이버 다운로드
: 크롬 버전과 호환되는 크롬드라이버를 다운로드 하자. 이상한 것은 압축이 zip이다.
https://sites.google.com/a/chromium.org/chromedriver/downloads
2.2 구글 드라이버 이동 및 권한
$ mv -f ~/chromedriver /usr/local/bin/chromedriver
$ chown root:root /usr/local/bin/chromedriver
$ chmod 0755 /usr/local/bin/chromedriver
3. 이클립스에서 웹 크롤링 프로젝트 생성
3.1 Maven 프로젝트로 생성
3.2 pom.xml 파일 수정하여 selenium 라이브러리를 다운로드
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-server</artifactId>
<version>3.141.59</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-chrome-driver</artifactId>
<version>3.141.59</version>
</dependency>
<!-- guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>22.0</version>
</dependency>
3.3 코드 작성
//WebDriver
private WebDriver driver;
private WebElement webElement;
//Properties
public static final String WEB_DRIVER_ID = "webdriver.chrome.driver";
public static final String WEB_DRIVER_PATH = "/usr/local/bin/chromedriver";
//크롤링 할 URL
private String base_url;
public TestApplication() {
super();
//System Property SetUp
System.setProperty(WEB_DRIVER_ID, WEB_DRIVER_PATH);
//Driver SetUp
ChromeOptions options = new ChromeOptions();
options.setCapability("ignoreProtectedModeSettings", true);
options.addArguments("headless");
options.addArguments("no-sandbox");
options.addArguments("disable-dev-shm-usage");
options.addArguments("lang=ko");
driver = new ChromeDriver(options);
}
public void crawl(String base_url) {
try {
driver.get(base_url);
Thread.sleep(4000);
Document doc = Jsoup.parse(driver.getPageSource());
Element classificationElement = doc.selectFirst("div.section-open-hours div.section-open-hours-container");
String timeString = classificationElement.attr("aria-label");
Sytem.out.println(timeString);
}
catch (Exception e) {
e.printStackTrace();
}
finally {
driver.close();
}
}
'Linux > CentOS' 카테고리의 다른 글
CentOS 7에 Tomcat 9 설치 (0) | 2022.04.26 |
---|---|
CentOS 7 에 openJDK 11 설치 (0) | 2022.04.26 |
MariaDB 백업(Backup) 및 복구(Restore) (0) | 2019.06.14 |
CentOS 7 에서 Tomcat 다중 설치 (0) | 2019.06.14 |
CentOS 7 에서 Host Name 변경 (0) | 2019.05.02 |