파이썬을 사용해서 웹크롤링을 하는 이유 

파이썬 웹크롤링은 Pandas와 TensorFlow(머신러닝) 패키지가 있기 때문에

한 언어로 데이터 수집, 처리, 분석이 모두 가능하다는 다른 언어보다 강점이 있다.


크롤링에 주요 사용되는 라이브러리 

• Requests 

파이썬에서 동작하는 작고 빠른 브라우저 웹서버로부터 초기 HTML만 받을 뿐, 

추가 CSS/JavaScript 처리 하지 못한다. 거의 모든 플랫폼에서 구동 가능


• Selenium 

브라우저를 원격 컨트롤하는 테스팅 라이브러리 Chrome, Firefox, IE, PhantomJS 등

기존 브라우저를 사용하므로, 추가 CSS/JavaScript 처리 지원

리소스를 많이 사용하고 느린 단점. 사이트에 따라 사용 못하기도 한다.

 

• BeautifulSoup4 

HTML 파서

지정 HTML로부터 원하는 위치/형식의 문자열을 획득

주로 Requests에 의해 많이 사용되지만, Selenium에서도 사용할 수 있다.

 

모든 웹페이지에 사용된 웹프론트엔드 기술과 구현방식이 모두 다르기 때문에, 

크롤링방법도 다르게 해야 한다.

 

웹페이지 크롤링은 크게 3가지로 구분된다.

1. 단순 HTML 크롤링 : Requests

2. Ajax 렌더링 크롤링 : Requests or Selenium

3. Angular JS, Vue.js, React.JS 류의 자바스크립트 렌더링 크롤링 : Selenium

 

흔한 크롤링 실패 사례

"페이지 소스" 메뉴를 통해 본 HTML은 웹서버로부터 받은 최초의 HTML이고, 이 HTML 구조는 자바 스크립트에 의해서 동적으로 로딩 후에 변경될 수 있다.

"브라우저 개발자도구"를 통해 확인한 구조는 최초의 구조로부터 JavaScript를 통해 변경된 구조이다.

따라서, ReactJS라는 JavaScript 코드를 통해 내용이 그려진 웹페이지를 보고 requests로 크롤링하면 변경 전의 최초의 HTML을 크롤링하기 때문에 내가 찾고자 하는 태그의 데이터가 없는 경우가 있다.  

이를 해결하는 방법으로 Selenium을 사용한다. 

 

Selenium 사용이 유리한 경우

• 웹페이지가 JavaScript로 동작한다.

• 내가 요청할 웹페이지가 몇 개 안된다.

• GUI가 있는 컴퓨터에서 수행한다. 

• 컴퓨터 사양이 넉넉하다.

 

Selenium 사용이 불리한 경우

• 요청할 웹페이지가 매우 많은 경우

• 컴퓨터 사양이 넉넉하지 못한 경우

• 자바스크립트 동작이 필요없는 경우


가급적 Requests를 통해 처리하는 것이 효율이 훨씬 좋다.

추가 이미지/JavaScript/CSS 등의 리소스를 로딩/실행하지 않기 때문이다.


Requests와 Selenium 사용에 대한 기준 

1. "페이지 소스" 메뉴로 봤을 때, 내가 원하는 컨텐츠가 있는가?

1) 있다면 : Requests

2) 없다면 : 다음 기준으로


2. 
내가 원하는 컨텐츠가 별도 Ajax요청을 통해 받아오진 않는가?
   (이는 브라우저 개발자 도구의 Network 탭을 통해 확인 가능)

1) 받아오고 있다면 : Requests

2) 내역을 못 찾겠다면 : 다음 기준

3. 내가 원하는 컨텐츠가 별도 자바스크립트 로직을 통해 그려지고 파이썬 로직으로 변환가능한가 ?

1. 변환가능하다면 파이썬 로직으로 변경해서 Requests

2. 모르겠거나, 불가능하다면 : Selenium


Requests 크롤링 Tip

요청 시에 종종 추가 header설정이 필요할 수 있다. 

헤더를 설정하지 않으면 응답을 주지 않는 서비스가 있음 ex) 네이버 웹툰은 네이버를 통해서 접속하지 않으면 웹툰 이미지를 열 수 없게 막아놓았다. header에 Referer을 지정해서 접근


 Referer 

어떠한 웹페이지를 거쳐온 요청인지 

참조


 User-Agent 

어떤 운영체제, 브라우저를 사용해서 접근하는지 정보가 들어있다.

요청을 안바꾸고 접근하면 User-Agent 에 Python으로 인한 접근이 찍히게 된다.

User Agent String 사이트에서 각 브라우저의 User-Agent 값을 확인 가능

참조


Accept-Language 

어떤 언어를 사용하는지 정보

Globar한 웹페이지 이용시 기본 언어 지정을 안하면 응답을 안하는 경우가 있는데, 흔하지 않음


모바일 페이지가 있다면 모바일 페이지를 크롤링

HTML 마크업이 보다 심플하다

특히, 네이버 카페나 블로그는 iframe으로 html구조가 매우 복잡해서 크롤링이 어려운경우가 많다.

이때, 모바일 페이지로 접근하면 같은 컨텐츠 내용을 쉽게 크롤링 가능 


출처 - 파이썬을 통한 웹페이지 크롤링 살펴보기(이진석)


+ Recent posts