파파비의 블로그

[python/파이썬] API를 활용한 크롤링 본문

개발/python

[python/파이썬] API를 활용한 크롤링

N. Dave 2021. 6. 15. 16:34
반응형

api를 활용하여 웹 서비스를 진행하는 경우

크롤링을 했을 때 해당 데이터가 html에 적용되어 오지 않는다.

html에 api를 통해 정보를 가져온 후 동적으로 적용하기 때문이다.

 

개발자도구 -> network에 가면 해당 페이지가 요청하는 api들을 확인할 수 있다.

(참고 : api url에 get 요청을 보내면 json형태의 data를 받게 된다)

 

따라서, 크롤링을 할 때 웹페이지가 api를 통해 정보를 가져온 후 dynamic하게 된 형태라면

해당 api url을 찾아 직접 서버에 get request를 보내고, 거기서 json 형태의 data를 받아 가공하면 된다.

 

다만, api 들은 크롤러를 통한 기계적인 접근을 막는 경우가 많아

 

requests.get에 header 설정을 해주어 정보를 얻곤 한다.

(헤더란 클리아이언트와 서버가 서로 정보를 주고 받을때 넣는 부가적인 정보이다)

 

예를 들어서 한번 내용을 확인해보자

다음 주식 페이지를 한번 살펴보면

 

https://finance.daum.net/

해당 페이지 하단에는 이렇게 랭킹이 나와있다.

카카오가 인기 검색 1위인데, 어디서 데이터를 받아오는지 확인하고 싶다면

개발자 도구 -> network -> search(돋보기 모양 클릭) -> 카카오 검색

 

카카오라는 워딩이 페이지에 여러곳 나와서 그런지 검색 결과가 여러개다.

그런데 우리가 원하는 정보는 ranks 라는 곳에서 받아오는 것이라고 유추할 수 있다.

ranks를 누르고, 탭을 preview로 바꾸었더니 저렇게 json 형태로 웹페이지가 data를 받아오는 모습을 확인할 수 있다.

ranks를 나타내는 동일한 request 옆에 칼럼에서 찾아서 더블클릭하면 새로 창이 만들어지면서 api 주소를 확보할 수 있다.

 

 

해당 url로 requests.get 을 보내면 종종 실패하기도 하지만 정상적으로 json형태의 data를 받을 수 있다.

 

python에서 json데이터를 바꾸려면 

json 라이브러리를 import 하고, loads 라는 함수를 쓰면 된다.

import json

req = requests.get("api url")
data = json.loads(req.text) 

 

{'data' : [ ... ]}

이 예시의 경우 json이 이런식으로 왔기 때문에 변환하면 딕셔너리 안에 하나의 key value가 있는 형태로 변환됩니다.

이에 맞게 원하는 데이터에 접근해서 사용하면 됩니다.

 

반응형
Comments