데이터분석/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"))