728x90
๋ฐ์ํ
ํ๋ก๊ทธ๋๋ฐ ์ธ๊ณ๋ฅผ ํ๊ตฌํฉ์๋ค.
์ด์ ๊ด๋ จ๊ธ (Daum ๋ค์ ์ํ ์ฌ์ดํธ ๋ฐ์ดํฐ ์์ง ์นํฌ๋กค๋ง)
2023.12.08 - [IT/Python] - [Python] 1. Daum ๋ค์ ์ํ ์ฌ์ดํธ ๋ฐ์ดํฐ ์์ง ์นํฌ๋กค๋ง
< ์กฐ์ ์ผ๋ณด ์ฌ์ดํธ '์ ๊ธฐ์ธ' ํค์๋ ๊ธฐ์ฌ ์ ๋ชฉ ์์ง ์นํฌ๋กค๋ง >
์์ง๋ฐ์ดํฐ
๊ธฐ์ฌ์ ๋ชฉ
์์ฑํ ๋ฐ์ดํฐ
์๋ํด๋ผ์ฐ๋
URL
์กฐ์ ์ผ๋ณด > ์ ๊ธฐ์ธ ๊ฒ์ > ๊ธฐ์ฌ ์ ๋ชฉ ์์น์ ๋ฐ์ดํฐ ์์ง
In [64]:
### ์ค์น ํ์ : pip install selenium
# ๋์ ์นํ์ด์ง ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
from selenium import webdriver
# ์นํ์ด์ง ๋ด์ ๋ฐ์ดํฐ ์ถ์ถ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
from selenium.webdriver.common.by import By
# ์๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ
import time
In [38]:
### ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ๋์ฐ๊ธฐ
# - ๋ธ๋ผ์ฐ์ ์ปจํธ๋กค
driver = webdriver.Chrome()
### url์ ์ด์ฉํ์ฌ ํ์ด์ง ์ ๊ทผ
# - get() : ํ์ด์ง์ ์ ๊ทผ ํ ํด๋น html ์ฝ๋ ์ฝ์ด ๋ค์ด๊ธฐ
# - driver ๊ฐ์ฒด๊ฐ ๋ชจ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์
#์ ๊ธฐ์ธ
driver.get("https://www.chosun.com/nsearch/?query=%EC%A0%84%EA%B8%B0%EC%84%B8&page=1&siteid=&sort=1&date_period=&date_start=&date_end=&writer=&field=&emd_word=&expt_word=&opt_chk=false&app_check=0&website=www,chosun&category=")
In [39]:
# ์กฐ์ ์ผ๋ณด ๋ด์ค ์ ๋ชฉ
### ์ ๊ธฐ์ธ
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
try:
# ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ๋์ฐ๊ธฐ
driver = webdriver.Chrome()
driver.implicitly_wait(10) # 10์ด๋ก ์ค์ , ํ์์ ๋ฐ๋ผ ์กฐ์
# ํ์ด์ง ์ ์กฐ์ (์ํ๋ ํ์ด์ง ์๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅ)
total_pages = 114
for page in range(1, total_pages + 1):
# url์ ์ด์ฉํ์ฌ ํ์ด์ง ์ ๊ทผ
url = f"https://www.chosun.com/nsearch/?query=%EC%A0%84%EA%B8%B0%EC%84%B8&page={page}&siteid=&sort=1&date_period=&date_start=&date_end=&writer=&field=&emd_word=&expt_word=&opt_chk=false&app_check=0&website=www,chosun&category="
driver.get(url)
# ์ํ์ ๋ชฉ ์์น ๊ฒฝ๋ก
news_cho_path = "#main > div.search-feed > div > div > div.story-card.story-card--art-left.\|.flex.flex--wrap.box--hidden-sm > div.story-card-right.\|.grid__col--sm-8.grid__col--md-8.grid__col--lg-8.box--pad-left-xs > div.story-card__headline-container.\|.box--margin-bottom-xs > div > a"
# ํ์ฌ ํฌ๋กฌ๋ธ๋ผ์ฐ์ ์ ๋ณด์ด๋ ์ํ์ ๋ชฉ ๋ชจ๋ ์ถ์ถ
news_cho_elements = driver.find_elements(By.CSS_SELECTOR, news_cho_path)
# ์์ง๋ ๋ฐ์ดํฐ๋ฅผ ํ์ผ์ ์ ์ฅ
with open("./data/news_cho_price.txt", "a", encoding="UTF-8") as f:
for i, title_element in enumerate(news_cho_elements):
title = title_element.text.strip()
print(f"No[{i + 1}] / title[{title}] on page[{page}]")
f.write(f"No[{i + 1}] / title[{title}] on page[{page}]\n")
# ํ์ด์ง ๋ก๋ฉ ๋ฐ ์ฝ๋ ์ฝ์ด๋ค์ด๋ ์๊ฐ์ ๋ฒ์ด์ฃผ๊ธฐ
time.sleep(1)
### ์ํ ํํธ์ ๋ํ ์ ๋ณด ์์ง์ด ๋๋๋ฉด ๋ค์ ๋ฉ์ธ์ผ๋ก ์ด๋
# - execute_script() : ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ ์ฒ๋ฆฌ ํจ์
driver.execute_script("window.history.go(-2)")
time.sleep(1)
except Exception as e:
print(e)
finally:
# ์นํฌ๋กค๋ง ์ฒ๋ฆฌ๊ฐ ๋ชจ๋ ์๋ฃ๋๋ฉด driver ์ข
๋ฃ
driver.quit()
No[1] / title[์ฅ๊ทผ์, ์ฌํด๋ ํฌ๋ค๊ณผ ์ฐํ ๊ธฐ๋ถ+๋ด์ฌํ๋..6๋
๊ฐ ๊พธ์คํ ์ ํ] on page[1]
No[2] / title[์ฅ๊ทผ์, ์ฌํด๋ ํฌ๋ค๊ณผ ์ฐํ ๊ธฐ๋ถ+๋ด์ฌํ๋..6๋
๊ฐ ๊พธ์คํ ์ ํ] on page[1]
No[3] / title[[์์ธAIํ๋ธ 2024] ๋ฐ๋น๋, ๊ธฐ์
๋ถ์ ๋๋ ๊ธ์ต AI ์ด์์คํดํธ ์ ๊ณต] on page[1]
No[4] / title['♥๊น๋ณด์ฑ' ์๋ด, ๋๋ฐ์ง ํ์๊ฐ๋ฉฐ ์ํ๊ณ ๊ฒฌ๋…"์ ๋คํํ
๋ฏธ์"] on page[1]
No[5] / title[ๅฐน ๋ํต๋ น์๊ฒ ๋๋ฌผ์ ๊ณ ์ถฉ ์์๋ธ ์๋ฏผ๋ค] on page[1]
No[6] / title[2์๊ฐ ๋์ ๊ณ ์ถฉ ์์๋ธ ์๋ฏผ๋ค, ์ผ๋ถ๋ ๋๋ฌผ] on page[1]
No[7] / title[A02๋ฉด] on page[1]
# ์ค๋ต
N
In [7]:
# ์๋ํด๋ผ์ฐ๋
from konlpy.tag import Okt
from collections import Counter
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# ํ
์คํธ ํ์ผ ์ด๊ธฐ
with open('./data/news_cho_price.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
news_titles = ' '.join(lines)
# ํํ์ ๋ถ์
okt = Okt()
nouns = okt.nouns(news_titles)
count = Counter(nouns)
# ๋ถ์ฉ์ด ์ ๊ฑฐ
remove_char_counter = Counter({x : count[x] for x in count if len(x) > 1})
# ์๋ํด๋ผ์ฐ๋ ์์ฑ
wordcloud = WordCloud(font_path='C:/Windows/Fonts/malgun.ttf', background_color='white', width=800, height=800).generate_from_frequencies(remove_char_counter)
# ์๋ํด๋ผ์ฐ๋ ์ถ๋ ฅ
plt.figure(figsize=(10, 10))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
### ์ ์ฅํ๊ธฐ
plt.savefig("./img/์กฐ์ ์ผ๋ณด_์ ๊ธฐ์ธ_์๋ํด๋ผ์ฐ๋_์๊ฐํ.png")
plt.show()
In [ ]:
In [ ]:
728x90
๋ฐ์ํ