Python/웹 크롤링

[웹 크롤링] 1. 웹 크롤링의 기초(네이버의 전체 코드를 가져와보자)

최문경 블로그 2019. 8. 17. 12:59

웹 크롤링에 들어가기에 앞서 사용자(브라우저)와 서버간의 관계에 대해 간단히 알아보자.

우리는 하루에 한 번 이상은 네이버에 들어갈 것이다. 실시간 검색어가 궁금하거나 뉴스를 보거나 등등의 이유로..

여기서 우리는 '들어간다'는 표현을 쓴다. 마치 사용자가 필요한 데이터가 있는 웹으로 움직인다는 뉘앙스로 표현을 한다. 하지만 웹은 사실 정반대로 움직인다.

 

 

사용자가 주소창에 URL을 입력하고 엔터를 누르는 순간 브라우저는 해당 URL이 가리키고 있는 서버로 데이터를 달라고 요청(request)을 보내고 서버는 요청을 받아서 문제가 없다면 응답(response)을 보낸다.

이 응답안에 우리가 브라우저로 볼 수 있는 해당 페이지의 모든 정보가 들어 있는 것이다.

즉, 오히려 사용자는 요청을 보낸 뒤 가만히 있고, 서버에서 사용자에게 이동하는 구조이다.

 

 

인터넷의 기본 구조

 

 

 

 

 

 

주소창에 네이버 주소를 쳐서 요청을 보내면 아래와 같은 네이버의 메인 화면이 브라우저에 나타나게 된다. 위에서 우리가 요청을 보내면 응답을 주고 그 응답 안에는 해당 페이지의 모든 정보가 들어있다고 했다. 그렇다면 그 응답 안에 아래와 같은 화면이 들어있는 것일까? 그렇지 않다.

 

 

 

 

 

 

 

'F12'를 누르거나 브라우저 화면에서 마우스 오른쪽 버튼을 누르고 '검사'버튼을 눌러보자. 아래와 같이 브라우저의 오른쪽에 창이 하나 생성되고 어떤 코드 같은 것들이 보일 것이다. 바로 이 코드들이 응답으로 온 것이다. 브라우저는 바로 이런 코드를 해석해 사람들이 보기 좋게 표현해 주는 역할을 하는 것이다.

 

 

 

 

 

 

지금까지의 과정을 파이썬에서 코드로 재현해 보자. 우리가 직접 브라우저에 접속하지 않고 파이썬에게 명령을 내려서 네이버 서버로 요청을 보내고 응답을 받은 후 그 안에 위와 같은 코드가 있는지 확인해 보는 것이다. 이 때 파이썬의 requests 모듈을 이용하면 굉장히 쉽게 구현할 수 있다.

 

 

먼저, requests 모듈을 임포트해 보자.

 

 

 

 

 

그리고 requests 모듈을 이용해서 네이버 서버로 요청을 보내보자. 단순히 요청만 보내는 것은 requests 모듈의 get 메소드를 이용하면 된다. get 메소드는 원하는 웹 페이지의 주소를 문자열 인자로 받는다. 네이버 메인 페이지의 URL 주소가 'https://www.naver.com/'이므로 다음과 같이 코드를 작성하면 된다. get 메소드를 이용하여 받은 응답을 naver_response라는 변수에 저장했다.

 

 

 

 

 

 

위의 단 두 줄 코드로 우리는 브라우저에서 주소창에 URL을 입력하고 서버로 요청을 보내서 응답을 받는 과정을 구현했다.

응답으로 받은 데이터를 naver_response라는 이름의 변수에 저장했는데, 이 응답으로 받은 데이터 안에는 여러 가지 데이터가 들어가 있다.

하지만 모두 알 필요는 없다. 우리가 사용할 데이터만 알아보자 여기서 우리가 확인해야 할 데이터는 개발자 도구를 열었을 때 보이는 코드들이다. 이것은 응답 안에서 text를 찾으면 확인 할 수 있다.

 

 

 

 

 

이렇게 아까 개발자 도구에서 봤던 코드와 정확히 같은 내용의 코드를 text를 사용해 확인해 보았다.

다만 여기서는 줄바꿈이나 들여쓰기가 생략되어 개발자 도구의 코드보다 알아보기 힘들 뿐이다.

 

 

문제는 이 긴 코드에서 우리가 원하는 정보를 어떻게 검색하느냐 하는 것이다.

 

- 다음 시간에 계속

 

참고 책-퀀트 전략 파이썬으로 세워라