파이썬

파이썬 - 웹페이지 정보를 본다는 건?

초롱불 2022. 1. 19. 17:17

파이썬을 이용해서 크롤링을 하기로 마음먹었다면 가장 먼저 할 일은

파이썬을 이용해서 웹 페이지의 정보를 불러오는 것이다.

 

웹 페이지 정보라는 건 뭘까? 우리가 일상적으로 인터넷을 사용하면서 접하게 되는 모든 것이다. 티스토리 블로그를 들어간다면 당신의 컴퓨터의 하드웨어에는 존재하지 않는 게시물, 이미지, HTML, CSS, 자바스크립트 등의 데이터를 조회할 수가 있다. 이것들은 어디에서 오는 걸까? 네트워크를 통해서 접근이 가능한 세계 어느 곳엔가 존재하는 서버라는 컴퓨터에서 응답(RESPONES)에서 온다. 물론 당신이 그 서비스요청(REQUEST)했기 때문에. 당신은 서비스를 요청한 고객, 즉 클라이언트이다. 요청을 했다고는 하는데 어떻게 요청이 된 걸까? 우리가 원하는 서버 컴퓨터에 있는 데이터를 우리가 원하는 형태로 받을 수 있었던 건 뭘까? 제대로 된 답을 들으려면 제대로 된 질문을 해야하는 것처럼 제대로 된 응답을 받으려면 제대로 된 요청을 해야만 했던 게 아닐까? 여기에 대한 답이자 우리가 한 요청의 기본은 바로 도메인 주소이다. 도메인 주소 우리가 편지를 붙일 때 쓰는 주소와 같다고 볼 수 있다. 주소를 써서 편지를 보내면 해당 주소로 편지가 도착하듯이 도메인 주소를 입력하면 해당 서버로 요청이 가능해진다. 사실은 IP주소가 실제 네트워크 상 서버의 주소이고 도메인 주소란 DNS서버를 통해서 이름붙여져 클라이언트들이 분별력있게 웹사이트에 접근 가능하게끔 하는 역할을 하지만 크롤링에 필요한 지식은 아니니 일단 넘어가보자.

위의 일련의 작업을 우리는 웹브라우저(엣지,크롬,파이어폭스 etc)를 통해서 손쉽게 한다. HTML, CSS, 자바스크립트로 깔끔하게 그려진 웹페이지를 조회할 수 있고 뒤로가기 앞으로 가기로 웹페이지를 넘나든다. 웹페이지에서 제공하는 파일, 이미지를 다운 받을 수 있고 텍스트도 슥 긁어서 클립보드에 복사가 가능하다. 이용자를 접속 등의 정보를 관리하기 위해서 부가적으로 활용되는 정보인 세션, 쿠키관리도 이루어진다.

 

여기까지가 일단은 웹 페이지에 대한 기본적인 상식 정리이다. 파이썬 크롤링을 할 때에도 알고 있으면 좋은 부분이다. 아예 모르고 있다면 크롤링 과정에서 문제가 생겼을 때 문제를 이해하지 못할 수도 있기 때문이다.

 

다시 파이썬을 이용한 웹페이지 요청으로 돌아가보자.

파이썬을 이용해서 웹페이지 요청을 한다는 것은 크롬을 열고 검색을 하는 일과 같은 일을 파이썬으로도 할 수 있느냐 묻는 것과 같다. 물론 할 수 있으니 크롤링이 가능한 것이다. 그런데 여기에는 두 가지 방법이 존재한다. 정적 크롤링과 동적 크롤링이 그것이다.

 

동적 크롤링이 이해하기 쉬우니 먼저 설명하자면 파이썬을 이용해서 웹 브라우저 위에 돌아가는 매크로 프로그램을 만드는 것이다. 크롬을 열고 게시판 페이지에 들어가고 게시물에 들어가서 복사하고 복사한 것을 엑셀에 넣고 게시물 페이지에서 뒤로가기를 누르고 다음 게시물을 누른다. 하는 걸 반복하는 프로그램을 만들 뿐이다. 게임 위에서 돌아가는 자동 사냥 프로그램을 돌리는 것과 비슷한 느낌이다.

 

정적 크롤링은 반대로 크롬과 같은 웹브라우저를 이용하지 않는다. 파이썬 자체에서 제공하는 라이브러리를 통해서 웹페이지 정보를 요청해 그 결과 값을 받는 식으로 진행된다. 웹브라우저를 통하지 않고서 이루어지는 웹페이지 정보 요청과 응답 값을 받는 과정은 웹브라우저에서 알아서 해주던 것들을 신경 써주어야 하는 부분이 있기에 까다로운 부분이 있다. 막강한 라이브러리의 기능과 각 기능에 대해서 상세하게 설명해주는 구글의 힘 덕분에 두려워할 필요는 없지만 자바 스크립트를 통해서 그려지는 비동기 웹페이지 같은 경우는 아예 정적 크롤링이 불가능할 수도 있다는 점은 알 필요가 있다.

 

앞의 설명만 들어보면 동적 크롤링이 쉬워보이고 장점만 가득할 것 같지만 막상 그렇지도 않다. 일단 동적 크롤링은 정적 크롤링에 비해서 압도적으로 느리다. 말 그대로 크롬을 띄워서 실행하는만큼 크롬이 리소스를 잡아먹는다. 웹페이지가 그려지는 것을 기다려야 하고 웹페이지가 제대로 그려지지 않은 상태에서 해당 정보를 읽어내려다가 오류를 일으키는 부정확한 면모도 있다. 이전 글에서 말했듯 나는 엄청나게 많은 페이지를 조회해야 했다. 사람이 하는 것보다야 속도가 나오겠지만 한 번 돌리고 그 결과 값을 얻는데 며칠이 걸릴 수도 있으며 어쩌면 부정확할지도 모르는(당연한 말이지만 데이터 프로젝트에서 정확도는 생명이다!) 크롤링을 돌리는 건 그다지 현명한 답이 아니었다. 웹페이지 구조상 정적 크롤링이 불가능하지만 않다면 정적 크롤링을 돌리는 게 훨씬 좋다.

 

'파이썬' 카테고리의 다른 글

파이썬 - 크롤링이 뭔데?  (0) 2022.01.18
파이썬 - 몰라도 시작하자  (0) 2022.01.18
파이썬 - 공부 계기  (0) 2022.01.07
ATM(백준11399)  (0) 2021.05.14
설탕 배달(백준2839)  (0) 2021.05.12