DevSSOM

파이썬 크롤링 - API를 이용한 크롤링 본문

Python/크롤링

파이썬 크롤링 - API를 이용한 크롤링

데브쏨 2021. 7. 16. 03:27
반응형

API

Application Programming Interface의 줄임말. 어떤 프로그램과 또 다른 프로그램을 연결해주는 매개체임. 컴퓨터를 다루기 위해 마우스와 키보드를 이용하는 것처럼 API는 프로그램과 프로그램 사이를 연결해주는 역할을 함.

 

예를 들어, 지도 데이터를 이용해서 맛집 찾기 웹 서비스를 제작하려면 어떻게 해야할까?

보통 사람들은 지도 데이터를 애초에 가지고 있지도 않고, 지도 데이터를 수집하는 것 또한 매우 어려운 일임. 그런데, 어느 날 구글이 가지고 있던 지도 데이터를 공개했다고 가정해봐. 하지만 원본 데이터는 너무 방대하기도 하고, 호환성 등의 문제도 있어서 쉽게 사용할 수가 없어. 그래서 구글은 지도 데이터를 응용해서 사용할 수 있도록 Google Map API라는 매개체를 사용자들에게 제공함.

 

이렇게 구글 맵 API처럼 API를 이용해서 정보를 가져오는 웹 사이트들이 꽤 있어. 이런 경우 정보가 HTML에 처음부터 존재하지는 않고, API로부터 불러오고나서야 HTML에 존재하게 돼.

 

daum 금융(https://finance.daum.net/) 같은 곳이 그럼.

따라서, daum 금융 사이트에서는 BeautifulSoup을 이용해서 주가 데이터를 크롤링 할 수 없음. 웹 사이트를 처음 로드할 때 HTML문서에는 주가 데이터가 존재하지 않기 때문에. 

 

 

API를 이용한 크롤링

보통 API를 이용해서 데이터를 불러오는 경우엔, 데이터가 '동적'으로 변화하는 일이 많아서 실시간으로 값을 불러와야 하는 경우가 많음. 기업 주가도 실시간으로 계속 바뀌기 때문에 계속 API에 주가 데이터를 요청하는 것.

 

이럴 땐 daum 금융 사이트에서 주가 정보를 요청하는 API에 접근해서 어떤 정보를 전달해주고 있는지를 보면 됨. 크롬 개발자 도구의 Network 탭에서 웹사이트가 데이터를 요청하는 API를 볼 수 있어.

 

그리고, API의 URL에 GET요청을 보내면 JSON 데이터를 얻을 수 있음. JSON은 key와 value를 저장하는, 딕셔너리 꼴의 데이터 형식임.

url = "http://finance.daum.net/api.search/ranks?limit=10"
req = requests.get(url)  # JSON 데이터

 

몇몇 웹사이트들은 크롤러 등을 통한 기계적인 접근을 막고 있음. 그래서 우회하기 위해서 requests.get 메소드에 "headers" 매개변수를 지정해주어야 함.

 

'헤더'란 HTTP상에서 클라이언트와 서버가 요청이나 응답을 보낼 때 전송하는 부가적인 정보를 의미. 이때 헤더에서 따로 지정해줘야할 옵션은 referer와 user-agent가 있음.

  • referer : 이전 웹 페이지의 주소를 의미
  • user-agent : 이용자의 여러가지 사양(브라우저, 운영체제 등)을 의미함.
custom_header = {
    'referer' : ...
    'user-agent' : ... }

 

 

 

 

 

728x90
반응형
댓글