낭만 프로그래머

CentOS 7 에서 자바 와 셀레니움을 사용하여 웹 크롤링 하기 본문

Linux/CentOS

CentOS 7 에서 자바 와 셀레니움을 사용하여 웹 크롤링 하기

조영래 2019. 6. 14. 15:37

웹 크롤링을 하다가 보면 페이지가 로딩되기 전에 소스를 가져옴에 따라 원하는 데이터를 추출할 수 없는 경우가 있다. 단적인 예로 구글맵이 되겠다. 아마 자바스크립트로 비동기 방식으로 엘리먼트들을 구성해서 그렇지 않나 싶다.
때문에 셀레니움을 사용하자. 즉 크롬 또는 다른 웹브라우저를 이용하여 로딩될때 까지 시간을 가진 다음 소스를 가져오는 방식이다. 

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