본문 바로가기

Project/3. SULCHELIN <API>

project 3.1 Sulchelin 크롤링, 데이터 디비에 저장하기 (mongoDB)

 

 

 

본론으로 들어가기 앞서.. .이게 어쩌다 보니 술집 추천 리스트가 됨

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

 

와인 / 칵테일 / 소주 / 맥주 / 

이렇게 추천 술집 리스트가 나타날 예정 

 

*사용프로그램: pycharm

*사용언어: python

 

 

 

client = MongoClient('localhost', 27017)
db = client.seoul_suljip

 

db 이름은 seoul_suljip

그리고 그 안에 분류로

suljip_wine/ suljip_cocktail/ suljip_soju/ suljip_beer 이렇게 저장

 

이번 프로젝트 이름은 네슐랭 (네이버+미슐랭)인데, 그 이유는 네이버 검색 api 로 찾은 맛집? 술집? 리스트를 사용하기 때문이져 ^^

 

1. 네이버 개발자 api 들어가서 오픈 API 이용신청 클릭

developers.naver.com/products/search/

 

검색 API 소개

검색 웹, 뉴스, 블로그 등 분야별 네이버 검색 결과를 웹 서비스 또는 모바일 앱에서 바로 보여 줄 수 있습니다. 또한 ’OO역맛집’과 같은 지역 검색을 할 수도 있으며, 부가적으로 성인검색어 ��

developers.naver.com

2. 환경추가 > WEB 설정 클릭 하면 애플리케이션 등록 나오는데, 나는 검색을 이용할거니까 사용 api 를 검색으로~~

그리고 비로그인 오픈 API에는 본인의 로컬호스트를 이용하면 된다. ex) http://localhost:5000

3. 그러면 네이버에서 클라이언트 아이디랑 시크릿코드를 준다. 그럼 그거 복사~~

 

 

4. 검색 API 이용하기 위해 REST API 네이버에서 제공해주는 가이드 참고하기 (나는 json 방식으로 요청, items 속성으로 검색 결과가 담겨옴)

검색 > 지역

네이버 지역 서비스에 등록된 각 지역별 업체 및 상호 검색 결과를 출력해주는 REST API입니다. 비로그인 오픈 API이므로 GET으로 호출할 때 HTTP Header에 애플리케이션 등록 시 발급받은 Client ID와 Client Secret 값을 같이 전송해 주시면 활용 가능합니다.

 

developers.naver.com/docs/search/local/

 

검색 API 지역 검색 개발가이드

NAVER Developers - 검색 API 지역 검색 개발가이드

developers.naver.com

 

 

 

# 서울시 구별로 맛집을 검색
seoul_gu = ["종로구", "중구", "용산구", "성동구", "광진구", "동대문구", "중랑구", "성북구", "강북구", "도봉구", "노원구", "은평구", "서대문구", "마포구", "양천구", "강서구", "구로구", "금천구", "영등포구", "동작구", "관악구", "서초구", "강남구", "송파구", "강동구"]

# 네이버 검색 API 아이디와 시크릿 키
client_id = ""
client_secret = ""

 

 

# 검색어를 전달하면 결과를 반환하는 함수
def get_naver_result(keyword):
time.sleep(0.1)
# url에 전달받은 검색어 삽입
api_url = f"https://openapi.naver.com/v1/search/local.json?query={keyword}&display=10&start=1&sort=random"
# 아이디와 시크릿 키를 부가 정보로 header에 실어 보내기
headers = {'X-Naver-Client-Id': client_id, 'X-Naver-Client-Secret': client_secret }
# 검색 결과를 data에 저장
data = requests.get(api_url, headers=headers)
# 받아온 JSON 결과를 딕셔너리로 변환
data = data.json()
return data['items']

 

 

# 저장할 전체 맛집 목록
docs = []


# 구별로 검색
# 1. 와인 (2 칵테일, 3 소주, 4 맥주 순으로 똑같이 반복 코드 짬) 
for gu in seoul_gu:
# '강님구 와인', '종로구 와인 ', '용산구 와인 ' .. 반복 인코딩
keyword_wine = f'{gu} 와인'

# 맛집 리스트 받아오기
suljip_list_wine = get_naver_result(keyword_wine)

# 구별 맛집 구분선
print("*"*80 + gu)

for suljip_wine in suljip_list_wine:
# 구 정보를 추가
suljip_wine['gu'] = gu
# 맛집을 인쇄
pprint.pprint(suljip_wine)
# docs에 와인맛집을 추가
docs.append(suljip_wine)

 

아래처럼 나오면 성공!  

 

insert_many로 한꺼번에 나온 검색결과 데이터들을 디비에 저장 

# 맛집 정보 저장
db.suljip_wine.insert_many(docs)
db.suljip_soju.insert_many(docs)
db.suljip_beer.insert_many(docs)
db.suljip_cocktail.insert_many(docs)