본문 바로가기
데이터분석/Pandas

Selenium 02 _ dart_selenium

by nemonemonemo 2025. 8. 22.
#필요한 패키지
import re
import time # <-- 셀리니움으로 할 때는 정보 헛돌 때가 있으므로 꼭 필요함 
# 페이지에 정보가 빠르게 안 담기고, 시간 지연이 있을 수 있어서
#정보가 브라우저에 그 페이지 정보가 다 담길 때까지 기다려줘야함 
# 그래서 시간 제일 오래 걸리니까 가장 후 순위로 고려하라고 하는 것 

# +++ opt) 파이썬 계열에서 날짜, 시간 처리할 때 대표적인 패키지
import datetime

# 2025.02.04 이런 날짜 형식이있어야 --> 주소를 생성할 수 있는 것

date_year = 2025
date_month = 2
date_day = 24
page = 1
# ==> 위의 정보들을 바탕으로 사이트가 허용하는 양식으로 변경하자 
date = datetime.datetime(date_year, date_month, date_day)
date_YYYYMMDD = date.strftime("%Y.%m.%d")

url = f"<https://dart.fss.or.kr/dsac001/mainAll.do?selectDate={date_YYYYMMDD}&sort=&series=&mdayCnt=0¤tPage=1>"
url

path = r"C:\\Users\\NT551_11TH\\Desktop\\9기 허예진\\수업\\pandas\\selenium\\chromedriver.exe"
#본인 환경에 맞춰서 해야함 

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

# 사람마다 접속에 대한 스타일은 다를 수 있음!!!
s = Service( path )  # 내가 다운받은 웹드라이버 파일을 접근!!!
# 컨트롤 하려는 브라우저에 대한 변수화!!!
driver = webdriver.Chrome( service= s)
# 원한느 주소를 바로 접속
driver.get( url )

#1번 공시 시간을 한 번 접근
b_path = '//*[@id="listContents"]/div[2]/table/tbody/tr[1]/td[1]'
temp = driver.find_element(By.XPATH, b_path)
temp.text
#'18:36'

# 공시 시간 5개만 출력을 해보자!!!!
for i in range( 1, 6):
    b_path = f'//*[@id="listContents"]/div[2]/table/tbody/tr[{i}]/td[1]'
    #print(b_path)
    temp = driver.find_element(By.XPATH, b_path)
    print(temp.text)
'''
18:36
18:33
18:20
18:15
18:11
'''

# - 1번 공시의 회사 이름접근
# - 1번 회사 코드값 접급
# - 1번 회사 속한 시장
# - 1번 공시 이름
# - 1번 공시 고유값

co_cat_path = '//*[@id="listContents"]/div[2]/table/tbody/tr[1]/td[2]/span/span'
temp = driver.find_element(By.XPATH, co_cat_path)
temp.text

temp.get_attribute("title")

## xpath 같은 경로 기반,,,
## 속서 : get_atttribute
## tag 중심으로 하는 방법,,,,

len( driver.find_elements(By.TAG_NAME, "tr") )

# 공시 이름에 대한 xpath
# ==> //*[@id="r_20250224901216"]

# Full XPATH
/html/body/div[4]/div[2]/div[1]/div[2]/div[3]/div[2]/table/tbody/tr[1]/td[3]/a
# ==> 규칙이 가능함!!!

rcp_path = '//*[@id="listContents"]/div[2]/table/tbody/tr[1]/td[3]'
temp = driver.find_element(By.XPATH, rcp_path)
temp.text

# 1번 회사 접근.
co_path = '//*[@id="listContents"]/div[2]/table/tbody/tr[1]/td[2]/span/a'
temp= driver.find_element(By.XPATH, co_path)
temp.text

temp.get_attribute("href")

re.findall( r'\\d{8}', temp.get_attribute("href"))[0]

co_cat_path = '//*[@id="listContents"]/div[2]/table/tbody/tr[1]/td[2]/span/span'
temp = driver.find_element(By.XPATH, co_cat_path)
temp.get_attribute("title")

rcp_path = '//*[@id="listContents"]/div[2]/table/tbody/tr[1]/td[3]'
temp = driver.find_element(By.XPATH, rcp_path)
temp.text

temp.find_element(By.TAG_NAME,"a").get_attribute("href")

re.findall(r'\\d{14}', temp.find_element(By.TAG_NAME,"a").get_attribute("href"))[0]

driver.find_element(By.CLASS_NAME,"tL").text

### 앞에서 5개만 돌려보자 ####
for i in range( 1, 6):
    # 보고 시간
    b_path = f'//*[@id="listContents"]/div[2]/table/tbody/tr[{i}]/td[1]'
    #print(b_path)
    temp = driver.find_element(By.XPATH, b_path)
    print(temp.text)

    # 회사 이름
    co_cat_path = f'//*[@id="listContents"]/div[2]/table/tbody/tr[{i}]/td[2]/span/span'
    temp = driver.find_element(By.XPATH, co_cat_path)
    print(temp.get_attribute("title"))
    co_name_path = f'//*[@id="listContents"]/div[2]/table/tbody/tr[{i}]/td[2]/span/a'
    temp = driver.find_element(By.XPATH, co_name_path)
    print(temp.text)
    print( re.findall(r'\\d{8}',temp.get_attribute("href") )[0] )

    # 공시내용
    rcp_path = f'//*[@id="listContents"]/div[2]/table/tbody/tr[{i}]/td[3]'
    temp = driver.find_element(By.XPATH, rcp_path)
    print(temp.text)
    print( re.findall(r'\\d{14}', temp.find_element(By.TAG_NAME,"a").get_attribute("href"))[0] )

    print("*"*50)
    
    
    
 len( driver.find_elements(By.TAG_NAME, "tr") )
 
 len(driver.find_elements(By.TAG_NAME,"tbody"))
 
 
 for i in driver.find_elements(By.TAG_NAME,"tbody"):
    print( len(i.find_elements(By.TAG_NAME,"tr")) )
 
 
 len(driver.find_elements(By.TAG_NAME,"tbody")[0].find_elements(By.TAG_NAME, "tr"))
 

'데이터분석 > Pandas' 카테고리의 다른 글

[Python] Pandas 13 _ pivot  (1) 2025.08.25
[Python] Pandas 12 _ na  (1) 2025.08.25
Selenium 01 _ selenium 설치 및 실행  (0) 2025.08.22
[Python] Pandas 11 _ pandas_m&a  (5) 2025.08.21
[Python] Pandas 10 _ csv  (0) 2025.08.21