from selenium import webdriver
import chromedriver_autoinstaller
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time
import csv
from selenium.common.exceptions import NoSuchElementException
list_result = []
for page_num in range(1, 3): # 1부터 n-1페이지까지
# 브라우저 접속
driver = webdriver.Chrome('')
time.sleep(1.5)
for i in range(1, 21):
# 행 변수 추출
# 기업명
c_name = driver.find_elements(By.CSS_SELECTOR, f'body > table:nth-child(9) > tbody > tr > td > table:nth-child(2) > tbody > tr > td:nth-child(1) > table:nth-child(12) > tbody > tr:nth-child(2) > td > table > tbody > tr:nth-child({i}) > td:nth-child(1) > a > font')
var1 = c_name[0].text
# 상장일
date = driver.find_elements(By.CSS_SELECTOR, f'body > table:nth-child(9) > tbody > tr > td > table:nth-child(2) > tbody > tr > td:nth-child(1) > table:nth-child(12) > tbody > tr:nth-child(2) > td > table > tbody > tr:nth-child({i}) > td:nth-child(2)')
var2 = date[0].text
# 현재가
price_now = driver.find_elements(By.CSS_SELECTOR, f'body > table:nth-child(9) > tbody > tr > td > table:nth-child(2) > tbody > tr > td:nth-child(1) > table:nth-child(12) > tbody > tr:nth-child(2) > td > table > tbody > tr:nth-child({i}) > td:nth-child(3)')
var3 = price_now[0].text
# 공모가
public_off = driver.find_elements(By.CSS_SELECTOR, f'body > table:nth-child(9) > tbody > tr > td > table:nth-child(2) > tbody > tr > td:nth-child(1) > table:nth-child(12) > tbody > tr:nth-child(2) > td > table > tbody > tr:nth-child({i}) > td:nth-child(5)')
var4 = public_off[0].text
# 시초가
price_start = driver.find_elements(By.CSS_SELECTOR, f'body > table:nth-child(9) > tbody > tr > td > table:nth-child(2) > tbody > tr > td:nth-child(1) > table:nth-child(12) > tbody > tr:nth-child(2) > td > table > tbody > tr:nth-child({i}) > td:nth-child(7)')
var5 = price_start[0].text
# 첫날종가
price_first_end = driver.find_elements(By.CSS_SELECTOR, f'body > table:nth-child(9) > tbody > tr > td > table:nth-child(2) > tbody > tr > td:nth-child(1) > table:nth-child(12) > tbody > tr:nth-child(2) > td > table > tbody > tr:nth-child({i}) > td:nth-child(9)')
var6 = price_first_end[0].text
# 상세페이지 진입
page_in = driver.find_elements(By.CSS_SELECTOR, f'body > table:nth-child(9) > tbody > tr > td > table:nth-child(2) > tbody > tr > td:nth-child(1) > table:nth-child(12) > tbody > tr:nth-child(2) > td > table > tbody > tr:nth-child({i}) > td:nth-child(1) > a > font')
page_in[0].click()
time.sleep(1)
# 청약 경쟁률
try:
comp_1 = driver.find_elements(By.CSS_SELECTOR, 'body > table:nth-child(9) > tbody > tr > td > table:nth-child(2) > tbody > tr > td:nth-child(1) > table:nth-child(6) > tbody > tr:nth-child(3) > td:nth-child(4)')
if comp_1:
var7 = comp_1[0].text
else:
var7 = None # comp_1이 비어있는 경우
except NoSuchElementException:
var7 = None # comp_1을 찾지 못하는 경우
# 수요예측 경쟁률
try:
comp_2 = driver.find_elements(By.CSS_SELECTOR, 'body > table:nth-child(9) > tbody > tr > td > table:nth-child(2) > tbody > tr > td:nth-child(1) > table:nth-child(17) > tbody > tr:nth-child(2) > td:nth-child(3)')
if comp_2:
var8 = comp_2[0].text
else:
var8 = None
except NoSuchElementException:
var8 = None
# 업종
try:
comp_3 = driver.find_elements(By.CSS_SELECTOR, 'body > table:nth-child(9) > tbody > tr > td > table:nth-child(2) > tbody > tr > td:nth-child(1) > table:nth-child(3) > tbody > tr:nth-child(3) > td:nth-child(2)')
if comp_3:
var9 = comp_3[0].text
else:
var9 = None
except NoSuchElementException:
var9 = None
# 종목코드
code = driver.find_elements(By.CSS_SELECTOR, 'body > table:nth-child(9) > tbody > tr > td > table:nth-child(2) > tbody > tr > td:nth-child(1) > table:nth-child(3) > tbody > tr:nth-child(2) > td:nth-child(4)')
var10 = code[0].text
# 신주모집 비율
try:
ratio = driver.find_elements(By.CSS_SELECTOR, 'body > table:nth-child(9) > tbody > tr > td > table:nth-child(2) > tbody > tr > td:nth-child(1) > table:nth-child(6) > tbody > tr:nth-child(2) > td:nth-child(2)')
if ratio:
var11 = ratio[0].text
else:
var11 = None
except NoSuchElementException:
var11 = None
# 공모 후 주식수
try:
num1 = driver.find_elements(By.CSS_SELECTOR, 'body > table:nth-child(9) > tbody > tr > td > table:nth-child(2) > tbody > tr > td:nth-child(1) > table:nth-child(37) > tbody > tr:nth-child(1) > td > table > tbody > tr > td > span > font:nth-child(13) > table > tbody > tr:nth-child(38) > td:nth-child(3) > font')
if num1:
var12 = num1[0].text
else:
var12 = None
except NoSuchElementException:
var12 = None
# 유통 가능 물량
try:
num2 = driver.find_elements(By.CSS_SELECTOR, 'body > table:nth-child(9) > tbody > tr > td > table:nth-child(2) > tbody > tr > td:nth-child(1) > table:nth-child(37) > tbody > tr:nth-child(1) > td > table > tbody > tr > td > span > font:nth-child(13) > table > tbody > tr:nth-child(37) > td:nth-child(4) > font')
if num2:
var13 = num2[0].text
else:
var13 = None
except NoSuchElementException:
var13 = None
# 공모금액
num3 = driver.find_elements(By.CSS_SELECTOR, 'body > table:nth-child(9) > tbody > tr > td > table:nth-child(2) > tbody > tr > td:nth-child(1) > table:nth-child(6) > tbody > tr:nth-child(4) > td:nth-child(4)')
var14 = num3[0].text
# 하나의 행으로 저장해 result에 행을 쌓기
list_1 = [var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12, var13, var14]
list_result.append(list_1)
# 상세페이지 탈출
time.sleep(1)
# CSV 파일에 데이터 쓰기
csv_file_path = 'IPO_yield.csv'
with open(csv_file_path, 'w', newline='', encoding='utf-8-sig') as csvfile: # utf-8-sig : 엑셀에서 한글 깨짐 방지
csv_writer = csv.writer(csvfile)
# 헤더 작성
header = ['기업명', '상장일', '현재가', '공모가', '시초가', '첫날종가', '청약경쟁률', '수요예측 경쟁률', '업종', '종목코드', '신주모집 비율', '공모 후 주식수', '유통가능물량', '공모금액']
csv_writer.writerow(header)
# 데이터 작성
for row in list_result:
csv_writer.writerow(row)
print(f'Data saved to {csv_file_path}')
'Python' 카테고리의 다른 글
| 파이썬 메일 전송 (1) | 2024.02.03 |
|---|---|
| 크롤링 방지 우회 (2) | 2024.02.03 |
| 38커뮤니케이션 (신규상장종목) 크롤링 (0) | 2024.02.01 |
| 펀드슈퍼마켓 (전체펀드 세부사항_기간수익률) 크롤링 (0) | 2024.02.01 |
| 펀드슈퍼마켓 (전체펀드) 크롤링 (2) | 2024.02.01 |