본문 바로가기
프로그래밍/프로그래밍 잡지식

파이썬으로 웹 크롤러 만들기 - (1) 웹스크레핑, 브라우저 동작방식

by 어느덧중반 2020. 7. 24.
반응형

웹 스크레핑이란 ?

웹 스크레핑은 데이터를 수집하는 작업을 말하며 가장 널리 쓰이는 방법은 프로그램을 만들어 웹 서버에 쿼리를 보내 데이터를 요청하고, 이를 파싱(내가 활용하기 편한 데이터로 변환)해 필요한 정보를 추출하는 작업을 자동으로 하는 것을 말한다.

 

왜 웹 스크레핑을 써야 할까 ?

오직 브라우저만 사용해 인터넷에 접근하면 수많은 가능성을 놓치고 있는 것이다. 브라우저는 자바스크립트를 실행하고 이미지를 표시하며 객체를 사람이 읽기 편한 형식으로 표시하는데 뛰어나지만, 웹 스크레퍼는 다량의 데이터를 수집하고 처리하는 데 뛰어나다. 모니터의 좁은 창에서 페이지를 하나씩 볼 필요 없이, 데이터베이스에서 수천, 심지어 수백만 페이지를 즉시 볼 수 있다.

데이터 수집을 하기 위해 API가 존재한다고 생각할 수 있다. 물론 목적에 딱 맞는 API를 찾는다면 그렇다고 볼 수도 있다. API를 이용하면 깔끔하게 구성된 데이터를 한 서버에서 다른 서버로 간편하게 옮길 수 있으니..일반적으로 API가 존재한다면 같은 데이터를 수집하기 위해 일부러 봇을 만들기보다 API를 쓰면 되지만, 아래와 같은 이유로 딱 맞는 API가 존재하지 않을 수 있다.

  • 아주 많은 사이트들에 걸쳐 작은 데이터를 수집해야 하는데 api가 서로 맞지 않을 수 있다.
  • 필요한 데이터가 작고 제한적이어서 웹마스터가 API를 준비하지 않았을 수 있다.
  • 사이트에 API를 만들 만한 인프라나 기술적 능력이 없을 수 있다.
  • 귀중한 데이터는 보호받고 있어 널리 퍼지는 것을 원하지 않는 경우도 잇다.
  • 설령 API가 있어도 형식이 맞지 않을 수 있고 요청 제한이 있을 수 있다.

 

스크레이퍼 제작

  • 파이썬으로 웹 서버에 정보를 요청하는 법
  • 서버 응답을 처리하는 기본적인 방법
  • 웹사이트와 자동적으로 통신하는 법
  • 도메인 이름받고 HTML 데이터 가져오기
  • 데이터 파싱해 원하는 정보 얻기
  • 원하는 정보 저장하기
  • 필요하다면 다른 페이지에서 이 과정 반복하기

 

브라우저로 정보 가져오는 구조에 대한 예시

ex) 앨리스는 웹 서버를 가지고 있음 / 밥은 데스크톱으로 앨리스의 서버에 연결하려고 함.

1. 밥의 컴퓨터는 1과 0으로 된 비트 스트림을 보냄. 각 비트는 전압으로 구별됨. 이들 비트는 정보를 구성하며, 헤더와 바디도 그런 정보에 포함됨. 헤더에는 바로 다음 목표인 밥의 라우터 MAC주소와 최종 목표인 앨리스의 IP주소가 들어있음. 바디에는 밥이 앨리스의 서버 애플리케이션에 요청하는 내용이 들어있음.

2. 밥의 라우터는 이들 비트를 받아 밥의 MAC주소에서 앨리스의 IP주소로 가는 패킷으로 해석함. 밥의 라우터의 고유 IP주소를 패킷에 'from'주소로 기록한 다음 밥의 라우터는 이 패킷을 인터넷에 보냄.

3. 밥의 패킷은 여러 중간 서버를 거치며 이동함.중간 서버들은 정확한 물리적 경로 또는 유선 경로를 거쳐 앨리스의 서버를 향해 패킷을 받음

4. 앨리스의 서버는 자신의 IP주소에서 그 패킷을 받음

5. 앨리스의 서버는 헤더에서 패킷 포트의 목적지 정보를 읽고 패킷을 적합한 어플리케이션, 즉 웹 서버 애플리케이션에 보냄. 웹 어플리케이션에서 패킷 포트의 목적지는 거의 항상 80포트임. IP주소가 거리 주소라면 포트 번호는 아파트의 동호수라 생각하면 됨.

6. 웹 서버 어플리케이션은 서버 프로세서에서 데이터 스트림을 받음. 이 데이터에는 다음과 같은 정보가 들어 있다.
    (이 요청을 GET요청임)
    (요청하는 파일은 index.html임)

7. 웹서버는 해당하는 HTML 파일을 찾고 새 패킷으로 묶어서 자신의 라우터를 통해 밥의 컴퓨터로 전송함. 웹서버가 보낸 패킷은 밥이 보낸 패킷과 같은 과정을 거쳐 밥의 컴퓨터에 도달함

반응형

댓글