네이버 영어사전 파싱 예제
예전부터 써왔던 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하려면 우회가 필요하더군요. 간단한 예제이지만 도움이 되시길 바라면서 오늘 이야기는 여기서 끝!
'연재 > Project Jarvis' 카테고리의 다른 글
[Bottle] yield를 사용하여 페이지 완성 전에 내용 내보내기 (29) | 2016.03.23 |
---|---|
[Pexpect] Telegram-cli 제어하기 (0) | 2016.03.20 |
[Bottle] paste 서버를 사용하여 Server load량 늘리기 (0) | 2016.03.09 |
[WebFramework] Bottle - Django의 간략판 (0) | 2016.02.27 |
[IFTTT] 텔레그램 봇으로 최신 Feed 받아보기 (9) | 2016.02.21 |
Telegram cli 윈도우에 깔기 (0) | 2016.02.21 |