ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Naver_API_XML
    Python 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
    안녕히가세요.

    'Python' 카테고리의 다른 글

    OPEN_API를 사용하여 데이터 수집하기  (0) 2020.06.15
    Naver_API_JSON  (0) 2020.06.10
    Open API_Naver  (0) 2020.06.10
    Selenium  (0) 2020.06.08
    Webcrawling - XML  (0) 2020.06.08
Designed by Tistory.