파이썬 혼자놀기 패키지 수월하고 재밌었던 2주차 수업

Soomni·2021년 9월 20일
0

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주차는 전반적으로 유용하고 문서작업 속도를 올릴 수 있는 좋은 시간이었던 것 같습니다.

profile
soomni's velog

0개의 댓글

관련 채용 정보