본문 바로가기
Python/Python_Crawling

네이버 API : 데이터 엑셀저장

by Mr.DonyStark 2024. 1. 21.

□ 목적 : 네이버 쇼핑몰에 등록된 품목(사용자가 조회한 키워드) 추출

 

□ 활용 라이브러리

 ○ requests : API에 요청 및 응답으로 데이터 크롤링을 위해 활용

 ○ openpyxl : 엑셀저장을 위해

 

API 중 http매서드 파라미터 참고사항

*링크: https://developers.naver.com/docs/serviceapi/search/shopping/shopping.md#%EC%87%BC%ED%95%91

 ○ 해당 글 작성자는 요청 url + display, start 파라미터를 사용함

   - 해당 코드(https://openapi.naver.com/v1/search/shop.json?query=노트북'&display=100&start=100)를 아래 코드와 같이 변환

   - 위 코드를 해석하면 네이버 쇼핑에 노트북을 100개까지 표시하고 검색시작위치는 100부터 하겠다라는 의미임.

   - 이를 맨아래 코드와 같이 작성하여 1 ~ 1000번째까지 값을 크롤링함

target_api = 'https://openapi.naver.com/v1/search/shop.json?query='+ target_word + '&display=100&start='+ str(start_num)

  * 세부내용 아래 코드 참조요망

 

status_code 상태코드

 ○ request를 보내고 응답온 결과 상태값의 코드에 따라 기능이 동작하도록 처리

 ○ 코드참고링크 : https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C

 ○ 해당 글 작성자는 정상을 의미하는 200일때 크롤링해라 라는 코드를 작성하였음

 

openpyxl 세부내용은 작성자의 블로그 또는 아래 링크로 참고요망

 ○ 링크 : https://dandora-90.tistory.com/152

 

openpyxl : 엑셀파일 저장

□ 사용 라이브러리 : openpyxl pip install openpyxl □ 함수 ○ 엑셀 파일 생성 : openpyxl.Workbook() ○ 엑셀 시트 선택 : 엑셀파일명.activce ○ 시트 이름 변경 : 변수명.title = 시트명 ○ 엑셀파일 저장 .save('

dandora-90.tistory.com

 결과물

 

#라이브러리 호출
import requests
import openpyxl
#X-Naver-Client-Id&Secrete 변수지정
personal_Id = 'X-Naver-Client-Id 입력'
personal_Pw = 'X-Naver-Client-Secret 입력'

#naver api 요청 header 값
naver_header = {
    'X-Naver-Client-Id' : personal_Id,
    'X-Naver-Client-Secret' : 'A5WJqEk6ya'
}

#엑셀파일 세팅
excel_data = openpyxl.Workbook() #파일생성
excel_sheet = excel_data.active #시트 선택 / 엑셀 엑티브 가져오기
excel_sheet.column_dimensions['A'].width = 10 #엑셀 A열 너비 설정
excel_sheet.column_dimensions['B'].width = 10 #엑셀 B열 너비 설정
excel_sheet.append(['구분','브랜드명'])  #위에서 지정한 A,B열의 필드명 지정

#□■□■크롤링 부분□■□■
#검색 키워드
target_word = input('품목명을 입력해주세요\t:\t')

start = 1 #검색 시작위치번호 설정을 위한 초기값
num = 0
for index in range(10):
    start_num = start + (index * 100)
    #요청 주소  /  display 수만큼 출력
    target_api = 'https://openapi.naver.com/v1/search/shop.json?query='+ target_word + '&display=100&start='+ str(start_num)
    #요청 정보 naver 서버로 보내기
    request_data = requests.get(target_api, headers = naver_header)
    print('데이터 요청보냄')

    #응답받은 데이터 변수처리
    get_data = request_data.json()

    #페이지별 상태 처리
    if request_data.status_code == 200:
        print('성공입니다.')
        for v in get_data['items']:
            num += 1
            excel_sheet.append([num, v['brand']])  #엑셀 추가시 행기준 리스트형식으로 추가후 다음행으로 저장되기때문에 리스트화함
    else:
        print('오류입니다.')

excel_data.save(target_word + '_rank.xlsx')  #파일명 및 형식 지정 후 저장. 경로지정을 안하면 현재 코드파일위치에 저장됨
excel_data.close() #반드시 저장후 종료