728x90
728x90
얼마전 개최되었던 2019 하반기 NUGU play Kit 개발 공모전에 참가했습니다.
총 두개의 주제로 기획을 진행하였습니다. (1개는 참가, 1개는 기획만)
첫 번째 주제는 기사를 요약해주는 서비스이며, 두 번째 주제는 ASMR 서비스 제공입니다.
실제 앱 사진입니다.
앱은 다음 링크에서 다운로드 받을 수 있습니다 : 다운로드
다음은 데이터 학습용으로 사용했던 코드입니다.
네이버 요약봇으로 요약된 결과와 원문을 비교하여 학습을 진행하였는데요. 단순히 HTML 크롤링으로는 해결할 수 없어서 Selenium 라이브러리를 사용해 JS(자바 스크립트)를 실행시키는 방법으로 실행했습니다.
영상을 보시면 이해를 할 수 있으실 겁니다.
이와 같이 크롬 브라우저를 직접 webdriver를 이용해 실행시켜 수집하는 방식입니다.
코드는 다음과 같습니다.
from selenium import webdriver
from bs4 import BeautifulSoup
import getpass
import csv
from newspaper import Article
urlArray = []
def GetList():
j = 0
url = str("https://media.naver.com/press/214?sid=104#lnb")
browser = webdriver.Chrome("C:/Users/" + getpass.getuser() + "/Documents/chromedriver")
browser.get(url)
k = 0
# browser.implicitly_wait(15)
while True:
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
k += 1
if k == 60:
break
# browser.implicitly_wait(15)
html = browser.page_source
soup = BeautifulSoup(html, 'html.parser')
# soup = BeautifulSoup(urllib.request.urlopen(url).read(), 'html.parser')
res = soup.find_all('li', 'press_edit_news_item')
browser.close()
# 기사 링크 배열에 저장
for n in res:
link = str(n.find('a')['href'])
urlArray.append(link)
print(j+1, end='')
print(". ", end='')
print(link)
j += 1
print(j, end='')
print("개의 기사 주소 수집 완료")
return j
def GetText(i):
try:
wrt = open("C:/Users/" + getpass.getuser() + "/Documents/log.csv", 'a', encoding='utf-8', newline='')
writer = csv.writer(wrt)
driver = webdriver.Chrome("C:/Users/" + getpass.getuser() + "/Documents/chromedriver")
driver.get(urlArray[i])
# driver.implicitly_wait(15)
a = Article(urlArray[i], language='ko')
try:
a.download()
a.parse()
articleText = str(a.text)
articleText = articleText.replace('\n', ' ')
driver.find_element_by_xpath('//*[@id="ct"]/div[1]/div[3]/div[2]/div[2]/div[1]/a').click()
# driver.implicitly_wait(5)
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
res = soup.find_all('div', '_contents_body _SUMMARY_CONTENT_BODY')
#driver.implicitly_wait(5)
print(i + 1, end='')
print(". 원문 : ", end='')
print(articleText)
for n in res:
text = n.get_text()
print(i+1, end='')
print(". 요약 : ", end='')
print(text)
writer.writerow([articleText, text])
driver.close()
except:
print("요약봇 지원하지 않는 기사")
writer.close()
driver.close()
except:
print("기사 가져올 수 없음: 쓸모없는 데이터 삭제")
writer.close()
driver.close()
if __name__ == "__main__":
j = GetList()
i = 0
while True:
GetText(i)
i += 1
if j == i:
break
print("처리 완료")
exit()
728x90
728x90