데이터사이언스 대학원 생활/TextAnalytics

파이썬 카카오 검색 API 활용 웹스크래핑

데욱 2023. 5. 26. 19:55

카카오 API 사용해서 웹스크래핑 해보기

네이버 만큼 친절하진 않았지만...

그렇다! 우린 카카오 검색 api 를 사용해서 웹스크래핑을 할 수 있다!

 

Kakao Developers

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

위의 사이트에 가면 친절하게 api 사용이 가능하다. 데이터 사용 제한도 막 걸려있지 않는듯 하다.(?)

 

다들 kakao 아이디는 있을테니... 그거로 하시면 된다.

내 애플리케이션 들어가서 간단하게 애플리케이션 만든다.

REST API 키

그럼 저렇게 앱 키가 나오는데 우리가 사용할 것은 REST API키다.왜냐면 검색 도구가 저걸 사용해야하기 때문!!!

 

REST API | Kakao Developers 문서

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

여기 들어가면 파라미터 바꿔서 결과값도 볼 수 있다. 

참고로 바꾸고 싶은것들은 이 문서를 보고 직접 바꾸면서 진행하면 된다. 재밌다 나름.

 

그래서 파이썬으로 어떻게 사용하는데!!! 

카카오는 네이버와 다르게 파이썬으로 어떻게 써야하는지... 나와있지 않다.

그래서 조금 구글링을 해봤는데 열심히 정리하신 분들이 있더라

 

https://blog.naver.com/PostView.naver?blogId=blueqnpfr1&logNo=222069986010&parentCategoryNo=&categoryNo=1&viewDate=&isShowPopularPosts=true&from=search

 

[PYTHON] 파이썬으로 카카오 API 사용하기 (requests)

이 카카오 API를 사용하기 위해 얼마나 많은 시간이 걸렸던가.......ㅋㅋㅋㅋㅋ 아니 이런 아주 간단한 ...

blog.naver.com

https://foss4g.tistory.com/1412

 

카카오 검색 API를 이용한 '깃대종' 블로그/카페 검색 가시화

안녕하세요? 이번 글은 카카오 검색 API를 이용하여 '깃대종'에 관한 블로그, 카페 검색 글을 저장하고, 이 정보를 트리맵(Treemap)으로 가시화하는 과정을 정리해 보겠습니다. 카카오 검색 API 사용

foss4g.tistory.com

요기 두개 블로그를 참조했다.

import requests
import json

url = "https://dapi.kakao.com/v2/search/blog" #kakaoapi 사용하여 blog 검색

queryString = {'query' : 'coffee' } #내가 원하는 검색어
header = {'Authorization': 'api 키'}
response = requests.get(url, headers=header, params=queryString) #위의 값들 가져와서 요청 -> 반응
tokens = response.json() 

print(response)
print(tokens)

참고로 api 키는 'KakaoAK ~api키' 이런식으로 쓰면된다. ex) 'KakaoAK 1234123142332141'

위의 코드를 수행하면 내가원하는 query에 대한 여러 정보들을 가져온다.

 

url 끝에 blog를 바꾸면 카페, 웹문서, 책 등... 원하는 정보를 가져온다.

여러 정보들이 도출되는데 대표적으로... title이나 link , 요약 content를 가져온다.

 

나는 title과 link를 왕창 가져오고 싶었다.

다음 코드도 위의 블로그 중에서 가져온건데 조금 더 세심하게 뽑을 수 있다.

위의 코드를 보고 구조를 파악한 후에, 아래 코드로 뽑아보는걸 추천한다.

 

import requests
from urllib.parse import urlparse

# 최대 사이즈 50개
def kakao_api(keyword, page):
    url ='https://dapi.kakao.com/v2/search/blog?&query=' + keyword + '&size=50'+ '&page=' + str(page)
    result = requests.get(urlparse(url).geturl(),
                          headers={'Authorization':'KakaoAK -'})
    json_obj = result.json()
    return json_obj

blog_list=[]; keyword = '닌텐도'; page = 1 # 1페이지 부터 시작

while page <=50: # 최대 50페이지 (최대 총 50page*50size)
    json_obj = kakao_api(keyword, page)

    # 필요한 데이터만 골라서 수집(타이틀과 링크)
    for document in json_obj['documents']:
        #타이틀의 특수문자 제거
        val = [document['title'].replace('<b>','').replace('</b>','').replace('&#39;','').replace('&amp;','').replace('=',''),
              document['url']]
        blog_list.append(val)
        
    # 마지막으로 데이터를 뽑을 수 있는 곳까지 반복    
    if json_obj['meta']['is_end'] is True: break
    page += 1
    
# 리스트를 텍스트 데이터로 전환
text_list = []
for item in blog_list:
    text_list.extend(item)

text = ' '.join(text_list)
print(text)

코드 중간에 val 부분에 문서를 참조하고 원하는 결과값을 추가, 제거 해도 된다.

참고로 나는 title과 link만 도출했으며

사실상 요약 contents는 그다지 필요없는게... 뽑으려고 했던 토픽이 포함된 문장이 1줄 정도 나온다.

 

그래서 이제 할 일! 

 

정규표현식으로 네이버 블로그,tistory의 결과만 뽑는다.

(저 둘을 제외한 나머지는 웹스크래핑 할 때 형식이 정해져 있지 않아 불편함만 준다.)

이후, 저기서 뽑은 link에서 html을 확인하고 정적,동적 웹스크래핑을 하면 원하는 정보를 왕창~ 가져올 수 있다.


네이버 블로그는 셀레니움으로, tistory의 경우 정적 스크래핑으로 충분히 가져와 지더라... (네이버는 살짝 복잡)

 

다음에 시간적으로 여유가 될때... 다음 편을 올려보도록 하겠다...

흑흑 너무 바쁘다.

뭐 사실상 카카오api 사용은 여기까지긴하다! 다음은 활용인것이지...