2주차는 훨씬 수월하고 재미있었던 수업이었어요.
하지만 유익한 부분이 1주차 보단 많았던 것 같아요.
1주차 수업은 파이썬의 기초를 알기 좋다면, 2주차는 활용하기 좋달까요.
우선 코드 go!
from openpyxl import Workbook
from bs4 import BeautifulSoup
from selenium import webdriver
driver = webdriver.Chrome('chromedriver')
url = "https://search.naver.com/search.naver?where=news&sm=tab_jum&query=추석"
driver.get(url)
req = driver.page_source
soup = BeautifulSoup(req, 'html.parser')
wb = Workbook()
ws1 = wb.active
ws1.title = "articles"
ws1.append(["제목", "링크", "신문사"])
articles = soup.select('#main_pack > section.sc_new.sp_nnews._prs_nws > div > div.group_news > ul > li')
for article in articles:
title = article.select_one('div.news_wrap.api_ani_send > div > a').text
url = article.select_one('div.news_wrap.api_ani_send > div > a')['href']
comp = article.select_one('a.info.press').text.split(' ')[0].replace('언론사','')
print(title, url, comp)
ws1.append([title, url, comp])
driver.quit()
wb.save(filename='articles.xlsx')
이 코드는 추석이라는 검색어의 기사들을 나열하고 html 문서를 parsing해서 원하는 정보만 빼낼 수 있는 유용한 코드였어요.
물론 html 언어를 잘 알고 있다면 좀 더 수월하게 들을 수 있는 강의랍니다.
이렇게 html 문서를 확인하고 가져오고 싶은 정보의 태그 위에서 마우스 우클릭 후, copy > copy selector를 통해 'div.news_wrap.api_ani_send > div > a'와 같은 정보들을 가지고 올 수 있답니다.
wb = Workbook()
ws1 = wb.active
ws1.title = "articles"
ws1.append(["제목", "링크", "신문사"])
.
. (중략)
.
ws1.append([title, url, comp])
또 위의 코드를 사용하여 파싱한 내용을 엑셀파일로 바로 정리할 수도 있어요.
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email import encoders
# 보내는 사람 정보
me = "본인이메일주소@gmail.com"
my_password = "비번"
# 로그인하기
s = smtplib.SMTP_SSL('smtp.gmail.com')
s.login(me, my_password)
# 받는 사람 정보
#you = "받는사람 이메일 주소@알맞은 도메인"
emails =[받는사람 이메일 주소1@알맞은 도메인1","받는사람 이메일 주소2@알맞은 도메인2","받는사람 이메일 주소3@알맞은 도메인3"]
for you in emails:
# 메일 기본 정보 설정
msg = MIMEMultipart('alternative')
msg['Subject'] = "제목"
msg['From'] = me
msg['To'] = you
# 메일 내용 쓰기
content = "이메일 내용"
part2 = MIMEText(content, 'plain')
msg.attach(part2)
part = MIMEBase('application', "octet-stream")
with open("articles.xlsx", 'rb') as file:
part.set_payload(file.read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment", filename="추석기사.xlsx") #확장자까지 입력!
msg.attach(part)
# 메일 보내고 서버 끄기
s.sendmail(me, you, msg.as_string())
s.quit()
위와 같은 코드로 파싱한 뒤 얻어낸 엑셀 파일을 메일로 전송할 수도 있답니다.(for문과 같이 반복문을 사용하면 여러사람한테도 보낼 수 있어요!)
2주차는 전반적으로 유용하고 문서작업 속도를 올릴 수 있는 좋은 시간이었던 것 같습니다.