๊ธฐ์ฌ ์น์คํฌ๋ํ(ํฌ๋กค๋ง)ํ๊ธฐ
ํฌ๋กค๋ง ํ๊ณ ์ถ์ ๋ถ๋ถ์ ์ฐํด๋ฆญ > ๊ฒ์ฌ > Copy > Copy selector
์น์ฌ์ดํธ ๋ง๋ค HTML ๊ตฌ์กฐ๊ฐ ๋ค๋ฅด๊ธฐ๋๋ฌธ์ ์ํ๋ ์ ๋ณด๋ฅผ ์ป๋ ๋ฐฉ๋ฒ๋ง ์๋ฉด ๐
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')
articles = soup.select('#main_pack > div.news.mynews.section._prs_nws > ul > li')
for article in articles:
title = article.select_one('dl > dt > a').text
url = article.select_one('dl > dt > a')['href']
comp = article.select_one('span._sp_each_source').text.split(" ")[0].replace('์ธ๋ก ์ฌ','')
print(title, url, comp)
driver.quit()
๋ค์ด๋ฒ์์ '์ถ์'์ ๊ฒ์ํ ๋ด์คํ์ด์ง๋ฅผ ํฌ๋กค๋งํด์๋ค.
๋ด์ค ๊ธฐ์ฌ ๋ชฉ๋ก์ ul > li๋ก ์ด๋ฃจ์ด์ ธ ์์ด์ select๋ฅผ ํตํด ๊ฐ์ ธ์๋ค.
๋์ฒด๋ก HTML ๊ตฌ์กฐ๋ง ์ ํ์ ํด์ Selector๋ค์ ๋ถ์ํ๋ฉฐ ํฌ๋กค๋ง ํด์ค๋ฉด ๋๋ค.
์ธ๋ก ์ฌ๋ฅผ ๊ฐ์ ธ์ฌ ๋ ์ธ๋ฐ ์๋ ํ ์คํธ๋ split์ ํตํด ์ ๊ฑฐํ๊ณ , '์ธ๋ก ์ฌ' ํ ์คํธ๋ ์ ๊ฑฐํ๋ค.
์์ ํ์ผ๋ก ์ ์ฅํ๊ธฐ
openpyxl์ ํ์ด์ฌ์ผ๋ก ์์ ํ์ผ์ ์ฝ๊ณ ์ธ ์ ์๊ฒ ๋ง๋ค์ด์ฃผ๋ ํจํค์ง์ด๋ค.
File > Settings > Python Interpreter > openpyxl > Install Package๋ฅผ ํตํด ํจํค์ง๋ฅผ ๋ค์ด๋ฐ์ ์ค๋ค.
from openpyxl import Workbook
wb = Workbook()
ws1 = wb.active
ws1.title = "articles" # ์ํธ ์ ๋ชฉ
ws1.append(["์ ๋ชฉ", "๋งํฌ", "์ ๋ฌธ์ฌ"])
wb.save(filename='articles.xlsx')
articles.xlsx๋ผ๋ ์์ ํ์ผ์ด ์์ฑ๋๊ณ , ์ฒซ๋ฒ์งธ ์ค์ ์ ๋ชฉ, ๋งํฌ, ์ ๋ฌธ์ฌ๊ฐ ์ถ๊ฐ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
โ ์ฃผ์ํ ์ !! ํ์ด์ฌ ํ๋ก๊ทธ๋จ์ ๋ค์ ์คํ์ํฌ๋ ์์ ํ์ผ์ ๊ผญ ๋ซ๊ณ ์คํํ์!!
์ด์ , ๋ด์ค ํฌ๋กค๋งํ ๋ด์ฉ์ ์์ ํ์ผ๋ก ์ ์ฅํ๊ธฐ.
from bs4 import BeautifulSoup
from selenium import webdriver
from openpyxl import Workbook
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')
articles = soup.select('#main_pack > div.news.mynews.section._prs_nws > ul > li')
wb = Workbook()
ws1 = wb.active
ws1.title = "articles" # ์ํธ ์ ๋ชฉ
ws1.append(["์ ๋ชฉ", "๋งํฌ", "์ ๋ฌธ์ฌ"])
for article in articles:
title = article.select_one('dl > dt > a').text
url = article.select_one('dl > dt > a')['href']
comp = article.select_one('span._sp_each_source').text.split(" ")[0].replace('์ธ๋ก ์ฌ','')
ws1.append([title, url, comp])
driver.quit()
wb.save(filename='articles.xlsx')
ํ์ด์ฌ์ผ๋ก ์ด๋ฉ์ผ ๋ณด๋ด๊ธฐ (SMTP)
SMTP์๋ฒ๋ฅผ ์ฌ์ฉํด ํฌ๋กค๋งํ ์์ ํ์ผ์ ์ด๋ฉ์ผ๋ก ๋ณด๋ผ ๊ฒ์ด๋ค.
๊ตฌ๊ธ๋ฉ์ผ(gmail.com)์ ์ฌ์ฉํ ๊ฒฝ์ฐ, 2๊ฐ์ง ์ค์ ์ ํด์ผํ๋ค.
1. ๋ณด์ ์์ค์ด ๋ฎ์ ์ฑ ์์ธ์ค ํ์ฉ
myaccount.google.com/lesssecureapps
'์ฌ์ฉ'์ผ๋ก ๋ฐ๊ฟ์ฃผ์ด์ผ ํ๋ค.
2. 2๋จ๊ณ ์ธ์ฆ์ ํ์ด์ฃผ์ด์ผ ํ๋ค.
(์ ๋ ์๋ ์ฌ์ฉํ์ง ์์์ผ๋ฏ๋ก PASS)
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 = "๋ณด๋ด๋ ์ฌ๋์ ์ด๋ฉ์ผ"
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()
ํน์ ์ฌ๋ฌ๋ช ์๊ฒ ๋งค์ผ์ ๋ณด๋ด๊ณ ์ถ๋ค๋ฉด,
emails = ["๋ฉ์ผ1", "๋ฉ์ผ2"...] ๊ฐ์ ๋ฐฐ์ด์ ๋ง๋ค์ด์ค ํ for ๋ฌธ์ ๋๋ฆฌ๋ฉด ๋๋ค!
'Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์นด์นด์คํก ์๋ํด๋ผ์ฐ๋ ๋ง๋ค๊ธฐ (0) | 2020.10.13 |
---|---|
์ด๋ฏธ์ง ์น ์คํฌ๋ํ(์น ํฌ๋กค๋ง)ํ๊ธฐ (0) | 2020.10.02 |