본문 바로가기
Python

파이썬으로 기사 크롤링 & 이메일 전송

by Couldi 2021. 9. 12.
반응형

사용한 패키지

bs4
selenium
openpyxl
smtplib
email

완성 코드

from bs4 import BeautifulSoup
from selenium import webdriver
from openpyxl import Workbook
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email import encoders


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('div > div.news_info > div.info_group > a.info.press').text.split(' ')[0].replace('언론사', '')
    thumbnail = article.select_one('.dsc_thumb > img')['src']

    print(thumbnail)

    ws1.append([title, url, comp, thumbnail])

driver.quit()
wb.save(filename='articles.xlsx')

# 보내는 사람 정보
me = "이메일주소"
my_password = "비밀번호"

# 로그인하기
s = smtplib.SMTP_SSL('smtp.gmail.com')
s.login(me, my_password)

# 받는 사람 정보
you = "받는사람이메일"

# 메일 기본 정보 설정
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()

후기

아무래도 강의가 예전 강의다 보니 제공되는 코드가 소소한 에러로 크롤링이 안되는 문제가 있었다. selector 부분만 수정해서 문제해결

참고자료

-

반응형

댓글