본문 바로가기

연재/Project Jarvis

간단한 Naver Endic(영어사전) 파싱 예제


네이버 영어사전 파싱 예제



  예전부터 써왔던 BeautifulSoup을 사용해서 파싱해본 예제입니다. 전통적으로 데스크탑 웹보다 모바일 웹이 파싱하기 간단해서 모바일 웹으로 파싱하였습니다. Telegram Bot과 연동시킨 예제인데, 사용해보실 분은 사용해도 괜찮을 듯 합니다. (덧. 요즘은 Scrapy라는 툴이 더 강력한듯 한데.. 이번 주말에는 손대보지 못했네요. 이게 더 좋다면 BeautifulSoup에서 갈아타는게 나을듯 한데..)




parse_naver_endic 함수


	
def parse_naverendic_section(card):
    resulttext = '';
    head = card.find_all('a', attrs={'class': 'h_word'})
    body = card.find_all('ul', attrs={'class': 'desc_lst'})

    if len(head) >= 1:
        resulttext += "<b>"
        resulttext += head[0].get_text(' ', strip=True)
        resulttext += "</b>\n"
    if len(body) >= 1:
        meaninglist = body[0].findAll('li')
        for item in meaninglist:
            resulttext += item.text.strip()
            resulttext += "\n"
            
    return resulttext 
	



Telegram Interface 부분 및 결과출력 부분


	
if getSearchMode(chat_id) == 0:
    try:
        url = 'http://m.endic.naver.com/search.nhn?searchOption=entryIdiom&query=' + text.encode('utf-8')
        url = urllib.quote(url, '/:?=&')
        resp = urllib2.urlopen(url).read()
        soup = BeautifulSoup(resp, "html.parser")
        target = soup.find_all('div', attrs={'class':'section_card'})

        if len(target) >= 1:
            tmp = ''
            i = 0
            for item in target:
                tmp += parse_naverendic_section(item)
                tmp += '\n'
                i += 1
                if i >=3:
                    break
            bot_reply('<b>[Naver Endic]</b>\n' + tmp, enablereply=0)

        else:
            bot_reply('No result in endic') 
	



결과 출력




  저같은 경우에는 찾은 뒤 개인 사전에도 저장이 되게 해두었는데.. 이런 식으로 활용하시면 도움이 될 듯 하네요. Naver가 Endic의 경우에는 다행히도 Bot임을 체크하지 않아서 평범하게 파싱해도 되는데, 네이버 메인검색결과를 API없이 Parsing하려면 우회가 필요하더군요. 간단한 예제이지만 도움이 되시길 바라면서 오늘 이야기는 여기서 끝!