본문 바로가기

정리/데이터 분석

[R, Python] Selenium 크롤링 (사이트 정보 긁어오기)

728x90

금융데이터, 블로그 글, 뉴스기사 등등 우리는 많은 정보를 웹사이트를 통해서 접합니다. 이를 전산화하고 DB를 적재하면서 데이터 분석이 가능해지는데요. 이를 위해 사이트 크롤링을 하는 방법을 작성하겠습니다.

 

[목차]

1. Selenium 패키지

2. 사이트 정보 입력 방법

3. R 크롤링 (사이트 정보 긁어오기)

4  Python 크롤링 (사이트 정보 긁어오기)

5. 주의사항

 

 

 

1. Selenium 패키지

Selenium 패키지는 웹 사이트를 테스트하고 자동화하는데 사용하는 패키지입니다.

많은 방법중에 왜 Selenium 이냐? 물을 수 있습니다.

그 첫번째 이유는 바로 웹브라우저를 동작시켜서 직접 실제 시뮬레이션하기 때문입니다. 실제 동작하는 화면을 보면서 실수도 확인 할 수 있고 특히 동적으로 변화되는 코드를 매 순간에 추적을 하여 최종 목적인 크롤링을 달성할 수 있습니다. 즉, 자바스크립트, 브라우저 렌더링을 수행하며 실제 브라우저와 동일한 결과를 얻을 수 있습니다.

참고로 동적인 웹페이지를 가져와야 한다면 BeautifulSoup을 사용해도 충분합니다.

두번째 이유는  크로스 브라우저 테스트 수행이 가능합니다. Chrome, Firefox, Edge, Safari와 같은 다양한 브라우저에서 동일한 테스트 케이스를 실행하고 브라우저 간 호환성을 확인할 수 있습니다.

 

 

2. 정보를 웹사이트에 저장하는 방법 (= 웹사이트에 있는 어떤 정보를 가져와야하는지)


웹 사이트는 HTML(HyperText Markup Language)이라는 마크업 언어를 사용하여 정보를 담고 있습니다. HTML은 웹 페이지의 구조와 콘텐츠를 정의하는 언어로, 크롤링 관점에서는 웹 페이지의 HTML 구조를 분석하여 원하는 정보를 추출하는 것이 중요합니다.

HTML 문서는 다음과 같이 기본적인 구성 요소를 포함합니다:

태그 (Tags): HTML 문서는 다양한 태그로 이루어져 있으며, 각 태그는 특정 의미와 역할을 가지고 있습니다. 예를 들어, <html>, <head>, <title>, <body>, <div>, <p>, <a>, <img> 등의 태그가 있으며, 이들은 웹 페이지의 구조를 정의하거나 콘텐츠를 표현합니다.

속성 (Attributes): 태그에는 속성이 포함될 수 있으며, 속성은 추가 정보를 제공합니다. 예를 들어, <a> 태그의 href 속성은 하이퍼링크의 대상 URL을 지정하고, <img> 태그의 src 속성은 이미지 파일의 경로를 지정합니다.

텍스트: HTML 문서에는 일반적인 텍스트도 포함됩니다. 이 텍스트는 웹 페이지의 내용을 설명하거나 사용자에게 표시됩니다.

HTML 문서 외에도 CSS ,Javascript를 통해 HTML을 좀 더 근사하고 역동적이게 보이도록 할 수 있습니다.  이 말은 즉, 정적인 정보와 동적인 정보를 적절한 IT기술을 이용하여 효율적이고 근사하게 보여주는 것이 웹 사이트가 되는 것입니다.

 

 따라서 우리는 웹사이트에 있는 정보들 중에 내가 사전에 확인하고 가져오기로 약속한 정보를 그것이 동적인지 정적인지 따질 필요 없이 정확하게 가져와야합니다. 

 그래서 우리는 데이터 수집, 분석에 좋은 스크립트 언어를 사용할 때, 특히 더 Selenium을 사용하게 된 것입니다. 

 

 

3. R 크롤링 (사이트 정보 긁어오기)

 

 

일단 맛보기로 위의 내용을 한번 보셔도 좋습니다.

R Selenium 패키지 시작 부분

 

위의 R 크롤링을 수행하기 위해서는 

첫번째, Java(Jdk)가 설치되어 있어야 합니다. 특히 JDK가 설치되어 있으면 좋습니다.

JDK(Java Development Kit)는 자바 언어로 애플리케이션을 개발하고 실행하기 위한 도구와 라이브러리의 집합입니다. JDK는 Java 언어와 관련된 모든 개발 작업에 필요한 요소를 제공합니다. JDK에 대한 구체적인 설명은 다음에 작성하겠습니다.  

 

두 번째, Selenium을 사용할 수 있는 브라우저 관련 Driver가 필요합니다. 위에서는 chromedriver.exe 입니다.

Chrome Driver : https://chromedriver.chromium.org/downloads

우리는 이를 통해서 코드로 chrome 제어가 가능해집니다. 따라서 없으면 안되고 

 

세 번째, Selenium Server Standalone jar 파일이 필요합니다.  

Selenium Download : https://www.selenium.dev/downloads/

 

Downloads

Selenium automates browsers. That's it!

www.selenium.dev

 

네 번째, 적절한 Chrome 브라우저 버전이 필요합니다.

이는 굉장히 중요한데 잘 사용하고 있다고해도 가끔씩 Chrome 브라우저 버전이 올라가지 않아서 조회 자체가 불가능한 경우도 있습니다. 따라서 위 사이트를 잘 알아두고 사이트 정보를 참고하면 좋습니다.

 

 

R Selenium 패키지 HTML Element 들을 수신하고 JSON Table 형태로 변환하는 과정

위 using ="tag name" , value ="body"  부분은 HTML 문법을 알아야 추적이 가능해집니다. 

 

 

4  Python 크롤링 (사이트 정보 긁어오기)

R 크롤링과 큰 차이는 없습니다. 오히려 깨끗할 수도 있겠네요.

find_element 에서 by 는 tag name 이고  value는 body 입니다. 저는 적재로직이 있기 때문에 mongodb 체크 함수도 존재합니다. 

 

 

 

5. 주의사항

 

확인이 더딜때는 개발자 도구에서 힌트를 얻을 수 있습니다. "개발자 도구"를 실행하고  확인이 필요한 영역을 클릭하고  path를 확인해나갈 수 있습니다. 대상 조회 방법은 다른 포스트에서 설명드리겠습니다.

경우에 따라서 크롤링 속도가 느릴 수 있습니다. 왜냐면 실제 브라우저 로딩까지 포함되므로 테스트나 자동화 하기에는 다소 더딜 수 있음을 감안해야합니다. 경우에 따라서는 중간에 오류가 난채로 종료될 수도 있습니다.

DDos 공격이 되지 않게 적당한 조회 속도 조절이 필요합니다.