์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Absolute
- AGI
- ai
- AI agents
- AI engineer
- AI researcher
- ajax
- algorithm
- Algorithms
- aliases
- Array ๊ฐ์ฒด
- ASI
- bayes' theorem
- Bit
- Blur
- BOM
- bootstrap
- canva
- challenges
- ChatGPT
- Today
- In Total
A Joyful AI Research Journey๐ณ๐
*[3] 241101 Konply, Selenium [Goorm All-In-One Pass! AI Project Master - 4th Session, Day 3] ๋ณธ๋ฌธ
*[3] 241101 Konply, Selenium [Goorm All-In-One Pass! AI Project Master - 4th Session, Day 3]
yjyuwisely 2024. 11. 1. 13:07241101 Fri 3rd class
์ค๋ ๋ฐฐ์ด ๊ฒ ์ค ๊ธฐ์ตํ ๊ฒ์ ์ ๋ฆฌํ๋ค.
๋ฉด์ ๋ ๋ง๋ก ์ค๋ช
ํ๋ค.
๊ฐ๋ฅ์ฑ์ ๋ณด๊ณ ๋ฝ์์ค ์๋ ์๋ค.
ํ๋ก์ ํธ๋งX
์ด๋ก ๋ ์ค์ํ๋ค.
์๋ฆฌ๋ฅผ ์๋ฉด ์ฝ๊ฒ ์ ๊ทผํ๋ค.
๊ณต๋ถํ ๋ ๊ณ ๋ฏผํ ์๊ฐ ๊ฐ์ง๊ธฐ, ์ด๋ป๊ฒ ํ์ง ๊ณ ๋ฏผ, ๊ฒ์ํ๊ธฐ, ์๊ฐ์ ํ๋ค.
์๊ณ ๋ฆฌ์ฆ ์ง๋ณด๊ธฐ, ๋์ด๋จ
ChatGPT ์์กด ์ฌํ๊ฐ ์ผ์ด๋ ์ ์๋ค.
๋ชปํ๋ ๊ฑฐ ์ก์๋ด๊ณ , ์ปจํธ๋กคํ๋ ค๋ฉด ์ง์ ์์ด์ผ ํ๋ค.
๋ง์ด ๊ณต๋ถ -> ํด๊ฒฐ์ฑ ์ ์๋ค. (ex. nltk)
์ธ๊ธฐ ์๋ ๊ฑฐ ์ซ์์ ๊ณต๋ถํ๋ฉด ์ค์ํ ๊ฑธ ๊ณต๋ถX
2,3๋ ์ฐจ ์์ง๋์ด -> ๊ธฐ๋ณธ ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ ์๋ค. -> ์ค๋๊ฐ์ง ๋ชปํ๋ค.
LLM ์ ์ดํ์ต
๋ง์ง๋ง ํ๋ก์ ํธ๋ ํ ๋ณ๋ก ํ๋ค. ์ค์ตํ๊ธฐ
์๋น์ค๋ฅผ ํ๋ ค๋ฉด ๊ธฐ๋ณธ์ ์ธ ์ง์์ด ์์ด์ผ ํ๋ค.
์๋ก์ด ํ๋ก์ ํธ ๊ฐ์ ๋ฐ ์๋ฆฌ๊ฐ ๋น์ทํ๋ค.
๊ธฐ๋ณธ์ ์๋ฉด / ํ๋๋ฅผ ์ ๋๋ก ์๋ฉด ์์ฉํด์ ๋ง๋ค ์ ์๋ค.
ํ ํฐ, ๋ถ์ฉ์ด ๋ฑ ์์์ผ ํ๋ค.
HTML -> w3schools.com ์ข์
์ฃผ์ ํฌ์ -> ์นํฌ๋กค๋ง -> ๋์ ๋จ
์์
ํ ์๋ ์ ๋ฆฌ
https://ldjwj.github.io/CLASS_PY_LIB_START/PYLIB_03_01_konlpy_nltk_v01_2411.html
!pip install konlpy
import nltk
import matplotlib.pyplot as plt
import numpy as np
import konlpy
import nltk
import matplotlib.pyplot as plt
import numpy as np
import konlpy
from konlpy.tag import Kkma
4-4 konlpy.tag.Okt ์ค์ตํด ๋ณด๊ธฐ
# KoNLPy ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น๊ฐ ํ์ํ๋ค๋ฉด ์ฃผ์์ ์ ๊ฑฐํ๊ณ ์คํํ์ธ์
# !pip install konlpy
from konlpy.tag import Okt
# 1. ๋ถ์๊ธฐ ๊ฐ์ฒด ์์ฑ
okt = Okt()
# ์์ ํ
์คํธ
text = "ํ๊ตญ์ด ํ
์คํธ ๋ฐ์ดํฐ ๋ถ์์ ์์ฐ์ด ์ฒ๋ฆฌ์์ ์ค์ํ ๋ถ๋ถ์
๋๋ค."
# 2. ํ ํฐํ (ํํ์ ๋ถ์)
tokens = okt.morphs(text)
print("ํ ํฐํ ๊ฒฐ๊ณผ:", tokens)
# 3. ํ์ฌ ํ๊น
pos_tags = okt.pos(text)
print("ํ์ฌ ํ๊น
๊ฒฐ๊ณผ:", pos_tags)
# 4. ๋ถ์ฉ์ด ์ ๊ฑฐ
# ๋ถ์ฉ์ด ๋ฆฌ์คํธ (ํ์์ ๋ฐ๋ผ ํ์ฅ ๊ฐ๋ฅ)
stopwords = ["์", "๋", "์ด", "๊ฐ", "์์", "๋ถ๋ถ", "์
๋๋ค"]
# ๋ถ์ฉ์ด๊ฐ ์ ๊ฑฐ๋ ๋จ์ด ๋ฆฌ์คํธ ์์ฑ
filtered_tokens = [word for word in tokens if word not in stopwords]
print("๋ถ์ฉ์ด ์ ๊ฑฐ ๊ฒฐ๊ณผ:", filtered_tokens)
[๋ ๋ฒจ์ ๋ฌธ์ 1] txt๋ฅผ ๋ถ๋ฌ์์ ์ด๋ฅผ Kkma๋ก ๋ถ์ํด ๋ณด์.
[๋ ๋ฒจ์ ๋ฌธ์ 2] Hannanum๋ก ๋ถ์ํด ๋ณด์.
nltk: ํ ํฐ์ ๋ถ๋ฅํด์ฃผ๋ ๋ชจ๋ธ ๋ค์ด ๋ฐ์ ์ฌ์ฉ
!pip install nltk
https://platform.openai.com/tokenizer
nltk.download('punkt')
์ฝํผ์ค: ํน์ ์ธ์ด ๋๋ ์ฃผ์ ์ ๋ํ ํ ์คํธ์ ๋ชจ์
STT ์์ฑ
ํ์ฉ์ฌ ๋น๋ ๋ถ์ -> ์ฌ๋ ์ฑํฅ ํ๋จ
์ฐ์ค๋ฌธ, ๋จ์ด ์ฌ์ฉ, ์ดํ๋ ฅ ํ๋ถ ๋ฑ -> ๋ถ์
VSCode์์ Colab ์ฐ๊ฒฐ
https://dogfoot1.tistory.com/92
pip install selenium
pip install webdriver-manager
์์ ์ฐพ๊ธฐ
- Selenium์ ์น ํ์ด์ง์์ ์์๋ฅผ ์ฐพ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ๋ค์ํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค
- ์ฐธ์กฐ URL : https://selenium-python.readthedocs.io/locating-elements.html
ํ๋์ DOM(๊ฐ์ฒด)์ ์ ๊ทผ - element
from selenium.webdriver.common.by import By
find_element(By.ID, "element_id"): ์์์ ๊ณ ์ ID๋ก ์ฐพ๊ธฐ
find_element(By.NAME, "element_name"): ์์์ name ์์ฑ์ผ๋ก ์ฐพ๊ธฐ
find_element(By.XPATH, "//div[@class='element']"): XPath ํํ์์ผ๋ก ์ฐพ๊ธฐ
find_element(By.LINK_TEXT, "Link Text"): ๋งํฌ์ ๊ฐ์์ ์ธ ํ
์คํธ๋ก ์ฐพ๊ธฐ
find_element(By.PARTIAL_LINK_TEXT, "Partial Link"): ๋งํฌ์ ๋ถ๋ถ ํ
์คํธ๋ก ์ฐพ๊ธฐ
find_element(By.TAG_NAME, "div"): HTML ํ๊ทธ ์ด๋ฆ์ผ๋ก ์ฐพ๊ธฐ
find_element(By.CLASS_NAME, "element_class"): CSS ํด๋์ค ์ด๋ฆ์ผ๋ก ์ฐพ๊ธฐ
find_element(By.CSS_SELECTOR, "div.element"): CSS ์ ํ์๋ก ์ฐพ๊ธฐโ
์ฌ๋ฌ๊ฐ์ DOM(๊ฐ์ฒด)์ ์ ๊ทผ - elements
from selenium.webdriver.common.by import By
find_elements(By.NAME, "name"): ์์์ name ์์ฑ์ผ๋ก ์ฌ๋ฌ ๊ฐ์ ์์๋ฅผ ์ฐพ์ต๋๋ค.
find_elements(By.XPATH, "xpath"): XPath ํํ์์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ๊ฐ์ ์์๋ฅผ ์ฐพ์ต๋๋ค.
find_elements(By.LINK_TEXT, "text"): ๋งํฌ์ ๊ฐ์์ ์ธ ํ
์คํธ๋ก ์ฌ๋ฌ ๊ฐ์ ์์๋ฅผ ์ฐพ์ต๋๋ค.
find_elements(By.PARTIAL_LINK_TEXT, "text"): ๋งํฌ์ ๋ถ๋ถ ํ
์คํธ๋ก ์ฌ๋ฌ ๊ฐ์ ์์๋ฅผ ์ฐพ์ต๋๋ค.
find_elements(By.TAG_NAME, "tag"): HTML ํ๊ทธ ์ด๋ฆ์ผ๋ก ์ฌ๋ฌ ๊ฐ์ ์์๋ฅผ ์ฐพ์ต๋๋ค.
find_elements(By.CLASS_NAME, "class"): CSS ํด๋์ค ์ด๋ฆ์ผ๋ก ์ฌ๋ฌ ๊ฐ์ ์์๋ฅผ ์ฐพ์ต๋๋ค.
find_elements(By.CSS_SELECTOR, "css"): CSS ์ ํ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ๊ฐ์ ์์๋ฅผ ์ฐพ์ต๋๋ค.โ
https://ldjwj.github.io/CLASS_PY_LIB_START/CL03_01_selenium_basic_V11.html
from selenium.webdriver.common.by import By
select_id = driver.find_element(By.ID, 'rank')
print(select_id)
print(select_id.text)
๊ฒฐ๊ณผ)
<selenium.webdriver.remote.webelement.WebElement (session="3f8ca0841e16ae6ab12a480d0b6d218e", element="f.2985483FCEEE8B67D80A7646DF8E012E.d.F3E6E49034E1E8C7C8D999B464268F27.e.96")> 10. ๋ญํน ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ(์น ํฌ๋กค๋ง)
sel_tag_h1 = driver.find_element(By.TAG_NAME, 'h1')
print(sel_tag_h1.text)
print(sel_tag_h1)
my web page <selenium.webdriver.remote.webelement.WebElement (session="3f8ca0841e16ae6ab12a480d0b6d218e", element="f.2985483FCEEE8B67D80A7646DF8E012E.d.F3E6E49034E1E8C7C8D999B464268F27.e.76")>
sel_tag_a1 = driver.find_elements(By.TAG_NAME, 'a')
print(type(sel_tag_a1) )
for one in sel_tag_a1:
print(one.text)
๊ฒฐ๊ณผ)
<class 'list'>
01. ์ ๋ชฉ ๊ฐ์ ธ์ค๊ธฐ(title)
02. ํ
์คํธ ๊ฐ์ ธ์ค๊ธฐ(p)
03. ๋งํฌ ๊ฐ์ ธ์ค๊ธฐ(a)
04. ์ด๋ฏธ์ง ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ(img)
05. ๋ฆฌ์คํธ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ(ul,ol)
06. id๋ฅผ ํ์ฉํ ์ ๋ณด ํ๋
07. class๋ฅผ ํ์ฉํ ์ ๋ณด ํ๋
08. ํ๋์ ์ด๋ฏธ์ง ๋ค์ด๋ก๋
09. ์ฌ๋ฌ๊ฐ์ ์ด๋ฏธ์ง ๋ค์ด๋ก๋
10. ๋ญํน ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ(์น ํฌ๋กค๋ง)
from selenium import webdriver
from selenium.webdriver.common.by import By
url = 'https://news.naver.com/'
# ์น ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ๋ URL๋ก ์ด๋ํฉ๋๋ค.
driver.get(url)
๊ฒ์์ฐฝ: //*[@id="u_hs"]/div/div/input
๋๋ณด๊ธฐ: //*[@id="u_hs"]/div/div/button[2]
ํตํฉ๊ฒ์: //*[@id="u_hs"]/button[1]
from selenium.webdriver.common.by import By
# ๊ฒ์ ์์ด์ฝ ์์ ์ฐพ๊ธฐ
# /html/body/section/header/div[1]/div/div/div[2]/div[3]/a
search_icon = driver.find_element(By.XPATH, '/html/body/section/header/div[1]/div/div/div[2]/div[3]/a')
print(search_icon.tag_name)
print(search_icon.text)
search_icon.click()
# ๊ฒ์์ฐฝ ์์ ์ฐพ๊ธฐ
# //*[@id="u_hs"]/div/div/input
search_input = driver.find_element(By.XPATH, '//*[@id="u_hs"]/div/div/input')
print(search_input.tag_name)
print(search_input.text)
# ๊ฒ์ ๋ฒํผ ์์ ์ฐพ๊ธฐ
# //*[@id="u_hs"]/div/div/button[2]
search_button = driver.find_element(By.XPATH, '//*[@id="u_hs"]/div/div/button[2]')
print(search_button.tag_name)
print(search_button.text)
# ๊ฒ์์ด ์
๋ ฅ ๋ฐ ๊ฒ์ ์คํ
search_input.send_keys("ํจ์
")
search_button.click()
๊ฒฐ๊ณผ)
path = '//*[@id="ct"]/div/section[1]/div[2]/ ... '
sel_xpath = driver.find_element(By.XPATH, path)
print(sel_xpath.text)
import time
# ํ์ฌ ํญ ํธ๋ค ์ ์ฅ
current_tab = driver.current_window_handle
print(current_tab)
# ๋ชจ๋ ํญ ํธ๋ค ๊ฐ์ ธ์ค๊ธฐ
all_tabs = driver.window_handles
print(all_tabs)
# ์๋ก์ด ํญ์ผ๋ก ์ ํ
for tab in all_tabs:
if tab != current_tab:
driver.switch_to.window(tab)
break
# ์๋ก์ด ํญ์์ URL ๊ฐ์ ธ์ค๊ธฐ
time.sleep(2) # ํ์ด์ง ๋ก๋ฉ ๋๊ธฐ
current_url = driver.current_url
print("์๋ก์ด ํญ์ URL:", current_url)
๊ฒฐ๊ณผ)
2985483FCEEE8B67D80A7646DF8E012E
['2985483FCEEE8B67D80A7646DF8E012E', '51ABD8E439E25B4FCECDA7B1DC8807E8', '262E1EF0F66D8B7B4E75B29EE6A9B121']
์๋ก์ด ํญ์ URL: https://search.naver.com/search.naver?where=news&ie=utf8&sm=nws_hty&query=%ED%8C%A8%EC%85%98
## ๊ฒ์๊ฒฐ๊ณผ ์ฐฝ์์ ์ ๋ณด๊ฐ์ ธ์ค๊ธฐ
# //*[@id="sp_nws1"]/div[1]/div/div[2]/a[2]
path = '//*[@id="sp_nws1"]/div[1]/div/div[2]/a[2]'
sel_xpath = driver.find_element(By.XPATH, path)
print(sel_xpath.text)
๊ฒฐ๊ณผ)
๊ฝ๋ชจ์ ๋ธ๋ก์น๋ง 1์ต…'ํ' ์๋ฆฌ ๋๋ ์ง๋๋๊ณค ํจ์
ํ์