Python

Naver_API_XML

2020. 6. 10. 11:42

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('&lt;','').replace('&gt;','')
        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('&amp;','').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('&lt;','').replace('b&gt;','').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
안녕히가세요.