본문 바로가기
Python

Python - 네이버 검색 Open API를 활용한 크롤링

by DGK 2021. 11. 1.

 

인프런 파이썬 입문 수업을 듣고 중요한 내용을 정리했습니다.
개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다.

 

Open API를 활용한 크롤링(Python)

Open API를 사용해서 크롤링을 연습하고자 한다.

 

네이버 검색 Open API를 통한 크롤링 연습

import requests

client_id = 'p_9ZJktltCKZd9gF3OH4'
client_secret = 'lsOUE9wiJD'

naver_open_api = 'https://openapi.naver.com/v1/search/shop.json?query=갤럭시노트10'
header_params = {"X-Naver-Client-Id":client_id, "X-Naver-Client-Secret":client_secret}
res = requests.get(naver_open_api, headers=header_params)

if res.status_code == 200:
    data = res.json()
    for index, item in enumerate(data['items']):
        print (index + 1, item['title'], item['link'])
else:
    print ("Error Code:", res.status_code)

 

```

결과 :

 

1 삼성전자 <b>갤럭시노트10</b> 256GB SM-N971N [자급제] https://search.shopping.naver.com/gate.nhn?id=20899748682

 

2 삼성전자 <b>갤럭시노트10</b> 256GB SM-N971S [SKT 기기변경] https://search.shopping.naver.com/gate.nhn?id=20552943544

 

3 <b>갤럭시노트10</b>/플러스 256GB 공기계/자급제 유심기변 약정할인 https://search.shopping.naver.com/gate.nhn?id=83031865853

 

4 삼성전자 <b>갤럭시노트10</b> 256GB SM-N971K [KT 기기변경] https://search.shopping.naver.com/gate.nhn?id=20552777949

 

5 삼성전자 <b>갤럭시노트10</b>플러스 256GB SM-N976S [SKT 기기변경] https://search.shopping.naver.com/gate.nhn?id=20554996135

 

6 삼성전자 <b>갤럭시노트10</b>플러스 5G 512GB SM-N976S (SKT) https://search.shopping.naver.com/gate.nhn?id=23936154523

 

7 삼성전자 <b>갤럭시노트10</b>플러스 5G 512GB SM-N976L (LG U+) https://search.shopping.naver.com/gate.nhn?id=23935933527

 

8 삼성전자 <b>갤럭시노트10</b>플러스 256GB SM-N976K [KT 기기변경] https://search.shopping.naver.com/gate.nhn?id=20554188925

 

9 삼성전자 <b>갤럭시노트10</b>플러스 5G 512GB SM-N976K (KT) https://search.shopping.naver.com/gate.nhn?id=23934003526

 

10 삼성전자 <b>갤럭시노트10</b> 256GB SM-N971S [SKT 번호이동] https://search.shopping.naver.com/gate.nhn?id=20552967615

 

```

 

requests 라이브러리의 get() 함수 인자에 API 요청 url과 headers 정보를 넣어서 네이버 검색 결과를 JSON 형태로 

가져올 수 있다.

 

또한, 이렇게 가져온 JSON 형태의 데이터들을 특정 변수에 할당하고 딕셔너리 문법을 사용하여 자유롭게 추출할 수

있다.

 

 

네이버 검색 Open API를 통한 크롤링 후, 엑셀파일에 데이터 저장

import requests
import openpyxl

client_id = 'p_9ZJktltCKZd9gF3OH4'
client_secret = 'lsOUE9wiJD'
start, num = 1, 0

excel_file = openpyxl.Workbook()
excel_sheet = excel_file.active
excel_sheet.column_dimensions['B'].width = 100
excel_sheet.column_dimensions['C'].width = 100
excel_sheet.append(['랭킹', '제목', '링크'])

for index in range(10):
    start_number = start + (index * 100)
    naver_open_api = 'https://openapi.naver.com/v1/search/shop.json?query=샤오미&display=100&start=' + str(start_number)
    header_params = {"X-Naver-Client-Id":client_id, "X-Naver-Client-Secret":client_secret}
    res = requests.get(naver_open_api, headers=header_params)
    if res.status_code == 200:
        data = res.json()
        for item in data['items']:
            num += 1
            excel_sheet.append([num, item['title'], item['link']])
    else:
        print ("Error Code:", res.status_code)

excel_file.save('IT.xlsx')
excel_file.close()

 

```

결과 :

 

네이버 Open API를 통해 받은 1000개의 검색 결과가 엑셀파일('IT.xlsx')에 저장됨

...

```

 

requests 라이브러리와 openpyxl 라이브러리를 함께 사용하여, 네이버 Open API를 통한 크롤링 후 얻은 데이터를 

엑셀 파일에 저장하는 코드이다.

 

네이버 Open API의 요청변수 display는 최대 100건의 검색결과를 보여주지만, 1000건의 검색 결과를 저장하기 위해

for문을 사용한 것이다.

 

또한, 네이버 Open API 요청변수는 위의 예시코드처럼 &로 연결해서 써주면 된다.

(자세한 내용은 네이버 Open API 홈페이지를 참고할 것)

 

append() 함수의 인자로 리스트가 들어가야만, 해당 인자들(데이터)이 엑셀 sheet의 가로줄로 하나씩 들어간다.

라이브러리를 통해 엑셀파일을 프로그램으로 열면, 마지막에는 반드시 닫아야 리소스 낭비를 방지할 수 있다.

참고로, 변수 Client_id와 Client_secret에는 본인의 네이버 Open API Client ID와 Client Secret을 넣으면 된다.

 

 

댓글