SeleniumμΌλ‘ λ―Έκ΅ μ£Όκ° μ§μ ν¬λ‘€λ§νκΈ°
μ΄λ² μμ μμλ μ§κΈκΉμ§ λ°°μ΄ Selenium μ§μμ νμ©ν΄ μ€λ¬΄ μμ€μ μΉ ν¬λ‘€λ§μ μ€μ΅ν΄λ³΄κ² μ΅λλ€.
μ€μ΅ νλ©΄μ μ½λλ Seleniumμ μ¬μ©νμ¬ Yahoo Finance
μΉμ¬μ΄νΈμμ Americas
μΉμ
μ ν
μ΄λΈ λ°μ΄ν°λ₯Ό μΆμΆνκ³ , κ·Έ λ°μ΄ν°λ₯Ό pandas
λΌμ΄λΈλ¬λ¦¬λ₯Ό μ΄μ©ν΄ μ 리νμ¬ μΆλ ₯νλ μμ μ
λλ€.
μ°Έκ³ : μΉ ν¬λ‘€λ§μ μΉμ¬μ΄νΈμ
HTML
,CSS
κ΅¬μ‘°κ° λ°λλ©΄ μ½λκ° λμνμ§ μμ μ μμ΅λλ€. μΉμ¬μ΄νΈμ κ΅¬μ‘°κ° λ³κ²½λλ©΄ μ½λλ₯Ό μ΄μ λ§κ² μμ ν΄μΌ ν©λλ€.
μ½λλ₯Ό λ¨κ³λ³λ‘ μ°¨κ·Όμ°¨κ·Ό μ΄ν΄λ³΄κ² μ΅λλ€.
1. νμ λΌμ΄λΈλ¬λ¦¬ μν¬νΈ
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import pandas as pd import time
-
selenium : μΉ μλν λ° μ€ν¬λνμ μν λΌμ΄λΈλ¬λ¦¬μ λλ€. μΉ νμ΄μ§μμ μμλ₯Ό μ°Ύκ³ μνΈμμ©ν μ μμ΅λλ€.
-
pandas : λ°μ΄ν°λ₯Ό ν νμμΌλ‘ λ€λ£° μ μλ λΌμ΄λΈλ¬λ¦¬λ‘, μμ κ³Ό λΉμ·ν λ°©μμΌλ‘ λ°μ΄ν°λ₯Ό λΆμν λ μ μ©ν©λλ€.
-
time : μκ° κ΄λ ¨ ν¨μλ₯Ό μ 곡νλ νμ΄μ¬ λ΄μ₯ λͺ¨λμ λλ€.
2. μΉλλΌμ΄λ² μ€ν λ° μΉμ¬μ΄νΈ μ΄λ
driver = webdriver.Chrome() driver.get('https://finance.yahoo.com/markets/')
-
webdriver.Chrome() : ν¬λ‘¬ λΈλΌμ°μ λ₯Ό μλμΌλ‘ μ μ΄νκΈ° μν΄ Chrome μΉλλΌμ΄λ²λ₯Ό μ€νν©λλ€. λλΌμ΄λ²λ₯Ό μ¬μ©ν΄ μΉ λΈλΌμ°μ μ°½μ μ½λλ€.
-
driver.get(URL) : μ£Όμ΄μ§ URLλ‘ μ΄λν©λλ€. μ¬κΈ°μλ Yahoo Financeμ 'Markets' νμ΄μ§λ‘ μ΄λν©λλ€.
3. νμ΄μ§ λ‘λ© λκΈ°
wait = WebDriverWait(driver, 10)
- WebDriverWait(driver, 10) : μ΅λ 10μ΄ λμ μμκ° λνλ λκΉμ§ λκΈ°ν©λλ€. νμ΄μ§κ° λ€ λ‘λλκΈ° μ μ μ½λλ₯Ό μ€ννλ©΄ μ€λ₯κ° λ°μν μ μμΌλ―λ‘, νΉμ μμκ° λνλ λκΉμ§ κΈ°λ€λ¦½λλ€.
4. 'Americas' μΉμ μ°ΎκΈ°
americas_section = wait.until(EC.presence_of_element_located((By.XPATH, "//h3[text()='Americas']")))
- wait.until() : 'Americas'λΌλ ν
μ€νΈλ₯Ό κ°μ§
h3
νκ·Έκ° νμ΄μ§μ λνλ λκΉμ§ κΈ°λ€λ¦½λλ€.EC.presence_of_element_located()
λ ν΄λΉ μμκ° νμ΄μ§μ λνλλμ§ νμΈνλ 쑰건μ λλ€.
5. μ€ν¬λ‘€ μ΄λ λ° μΉμ λ΄λΆ ν μ΄λΈ μ°ΎκΈ°
actions = ActionChains(driver) actions.move_to_element(americas_section).perform() parent_section = americas_section.find_element(By.XPATH, "./ancestor::section[contains(@data-testid, 'world-indices')]") table = parent_section.find_element(By.XPATH, ".//table")
-
ActionChains(driver) : νμ΄μ§μμ λ§μ°μ€λ₯Ό μμ§μ΄κ±°λ ν΄λ¦νλ λμμ μλνν λ μ¬μ©λ©λλ€. μ¬κΈ°μλ 'Americas' μΉμ μΌλ‘ μ€ν¬λ‘€μ μ΄λν©λλ€.
-
find_element(By.XPATH) : 'Americas' μΉμ μ λΆλͺ¨ μμμΈ
section
νκ·Έ μμμ ν μ΄λΈμ μ°Ύμ΅λλ€.
6. ν μ΄λΈ λ°μ΄ν° μΆμΆ
headers = [header.text for header in table.find_elements(By.XPATH, ".//th")] rows = table.find_elements(By.XPATH, ".//tbody/tr")
-
table.find_elements(): ν μ΄λΈμ ν€λμ κ° νμ λ°μ΄ν°λ₯Ό μΆμΆν©λλ€.
-
th
: ν μ΄λΈμ ν€λ μ 보λ₯Ό μλ―Έν©λλ€. -
tr
: ν μ΄λΈμ νμ μλ―Έν©λλ€.
-
7. λ°μ΄ν°λ₯Ό 리μ€νΈλ‘ μ μ₯
table_data = [] for row in rows: columns = row.find_elements(By.XPATH, ".//td") row_data = {} for i in range(len(headers)): header = headers[i] column_value = columns[i].text row_data[header] = column_value table_data.append(row_data)
- κ° ν(
tr
)μ μ΄ λ°μ΄ν°(td
)λ₯Ό μΆμΆν ν, ν€λμ μΌμΉνλ κ°λ€μ λμ λλ¦¬λ‘ μ μ₯ν©λλ€. μ΅μ’ μ μΌλ‘ λμ λ리λ₯Ό 리μ€νΈμ μΆκ°ν©λλ€.
8. λ°μ΄ν°λ₯Ό νλ€μ€ λ°μ΄ν°νλ μμΌλ‘ λ³ν λ° μΆλ ₯
df = pd.DataFrame(table_data) df_filtered = df[['Symbol', 'Price']] print(df_filtered)
-
pd.DataFrame(): μΆμΆλ λ°μ΄ν°λ₯Ό νλ€μ€ λ°μ΄ν°νλ μμΌλ‘ λ³νν©λλ€.
-
df[['Symbol', 'Price']]:
Name
κ³ΌPrice
컬λΌλ§ νν°λ§νμ¬ μ 리λ λ°μ΄ν°λ₯Ό μΆλ ₯ν©λλ€.
9. λΈλΌμ°μ μ’ λ£
driver.quit()
- driver.quit(): λͺ¨λ μμ μ΄ λλ ν λΈλΌμ°μ λ₯Ό λ«μ 리μμ€λ₯Ό ν΄μ ν©λλ€.
Run the code and check the results.
Guidelines
AI Tutor
Publish
Design
Upload
Notes
Favorites
Help
Code Editor
Execution Result