Naver_API를 이용한 검색기(xml)
from bs4 import BeautifulSoup
import requests
책 검색
def py_xml_proc_book(resp):
soup = BeautifulSoup(resp.text)
book_all = soup.select('item')
for book_one in book_all:
title_b = book_one.select_one('title').text
title = title_b.replace('<b>','').replace('</b>','')
price = book_one.select_one('price').text
discount = book_one.select_one('discount').text
print('* Title : {}'.format(title))
print('* Price : {}'.format(price))
print('* Discount : {}'.format(discount))
print('*'*50)
블로그 검색 함수
def py_xml_proc_blog(resp):
soup = BeautifulSoup(resp.text)
blog_all = soup.select('item')
for blog_one in blog_all:
blog_b = blog_one.select_one('title').text
blog = blog_b.replace('<','').replace('>','')
bloggername = blog_one.select_one('bloggername').text
bloggerlink = blog_one.select_one('bloggerlink').text
print('* Title : {}'.format(title))
print('* bloggername : {}'.format(bloggername))
print('* bloggerlink : {}'.format(bloggerlink))
print('*'*50)
뉴스 검색 함수
def py_xml_proc_news(resp):
soup = BeautifulSoup(resp.text)
news_all = soup.select('item')
for news_one in news_all:
news_b = news_one.select_one('title').text
title = news_b.replace('&','').replace('quot;','')
originallink = news_one.select_one('originallink').text
# <link />www~ 처럼 태그안에 없고 그 다음에 있는 경우 next로 가져오면 해결됨
link = news_one.select_one('link').next
print('* Title : {}'.format(title))
print('* originallink : {}'.format(originallink))
print('* link : {}'.format(link))
print('*'*50)
쇼핑 검색 함수
def py_xml_proc_shop(resp):
soup = BeautifulSoup(resp.text)
shop_all = soup.select('item')
for shop_one in shop_all:
shop_b = shop_one.select_one('title').text
title = shop_b.replace('<','').replace('b>','').replace('<b>','').replace('</b>','')
producttype = shop_one.select_one('producttype').text
if producttype == '1' or producttype == '2' or producttype == '3':
producttype = '일반상품'
elif producttype == '4' or producttype == '5' or producttype == '6':
producttype = '중고상품'
elif producttype == '7' or producttype == '8' or producttype == '9':
producttype = '단종상품'
else:
producttype = '판매예정상품'
maker = shop_one.select_one('maker').text
brand = shop_one.select_one('brand').text
lprice = shop_one.select_one('lprice').text
hprice = shop_one.select_one('hprice').text
print('* Title : {}'.format(title))
print('* producttype : {}'.format(producttype))
print('* maker : {}'.format(maker))
print('* brand : {}'.format(brand))
print('* lprice : {}'.format(lprice))
print('* hprice : {}'.format(hprice))
print('*'*50)
def naver_search_xml(number, query, display, start, sort):
search_kind = ['book', 'blog', 'news', 'shop']
client_id = '__user id__'
client_secret = '__user secret__'
url = 'https://openapi.naver.com/v1/search/{}.xml'.format(search_kind[number-1])
params = {'query':query, 'display':display, 'start':start, 'sort':sort}
headers = {
'X-Naver-Client-Id':client_id, 'X-Naver-Client-Secret':client_secret
}
response = requests.get(url, headers=headers, params=params)
# 항목 추가되면 elif문 추가 할 것
if response.status_code == 200 and number == 1:
py_xml_proc_book(response)
elif response.status_code == 200 and number == 2:
py_xml_proc_blog(response)
elif response.status_code == 200 and number == 3:
py_xml_proc_news(response)
elif response.status_code == 200 and number == 4:
py_xml_proc_shop(response)
else:
print(response.status_code)
def app():
prompt = '''
1. Book Search
2. Blog Search
3. News Search
4. Shopping Search
5. Quit
'''
number = 0
while True:
print(prompt)
number = int(input())
if number == 5:
print('안녕히가세요.')
break
query = input('검색어를 넣으세요 >')
display = 10
start = 1
sort = 'date'
naver_search_xml(number, query, display, start, sort)
#실행
app()
1. Book Search
2. Blog Search
3. News Search
4. Shopping Search
5. Quit
3
검색어를 넣으세요 >it
[동정]장세용 구미시장 http://www.nspna.com/news/?mode=view&newsid=433868 http://www.nspna.com/news/?mode=view&newsid=433868
**************************************************
FRANCE POLICE GOVERNMENT https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=104&oid=091&aid=0008056844
**************************************************
Hyundai Heavy wins $90 billion order for two carriers https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=101&oid=640&aid=0000001102
**************************************************
FRANCE POLICE GOVERNMENT https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=104&oid=091&aid=0008056841
**************************************************
FRANCE POLICE GOVERNMENT https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=104&oid=091&aid=0008056840
**************************************************
수자원공사, 송산그린시티에 첨단 기술 반영한다 http://www.ikld.kr/news/articleView.html?idxno=218889 http://www.ikld.kr/news/articleView.html?idxno=218889
**************************************************
FRANCE POLICE GOVERNMENT https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=104&oid=091&aid=0008056842
**************************************************
KOSOVO PANDEMIC CORONAVIRUS COVID19 SCHOOLS https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=104&oid=091&aid=0008056843
**************************************************
워크데이-MS, 플래닝 가속화 위한 파트너십 체결 http://www.ddaily.co.kr/news/article.html?no=196688 https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=105&oid=138&aid=0002087095
**************************************************
송산그린시티 전문가 자문단 위촉… 새 개념·기술 담는다 http://www.lak.co.kr/news/boardview.php?id=9118 http://www.lak.co.kr/news/boardview.php?id=9118
**************************************************
1. Book Search
2. Blog Search
3. News Search
4. Shopping Search
5. Quit
5
안녕히가세요.