IPO stock_crawler

ianman99 ㅣ 2024. 2. 22. 16:59

import requests
from bs4 import BeautifulSoup
import pandas as pd
from concurrent.futures import ThreadPoolExecutor

# 개별 페이지 처리 함수
def fetch_data(page_num):
    data = []
    try:
        # 공모정보 페이지
        var1 = requests.get(f'http://www.ipostock.co.kr/view_pg/view_04.asp?code=B{page_num}&gmenu=')
        soup = BeautifulSoup(var1.content, 'html.parser')

        # 정보 수집
        종목명 = soup.select('.view_tit')[0].text.strip()
        종목코드 = soup.select('.view_txt01')[0].text.strip()
        상장일 = soup.select('td[height="26"]')[0].text.strip()
        공모가 = soup.select('td[height="25"] font[color="B83D11"] strong')[0].text.strip()
        청약경쟁률 = soup.select('td[height="25"] strong font[color="B83D11"]')[1].text.strip()
        우리사주배정비율 = soup.select('table[width="350"] tr[align="center"] td')[2].text.strip()

        # 수요예측 페이지
        var2 = requests.get(f'http://www.ipostock.co.kr/view_pg/view_05.asp?code=B{page_num}&gmenu=')
        soup = BeautifulSoup(var2.content, 'html.parser')

        # 정보 수집
        기관경쟁률 = soup.select('tr[height="26"] td[align="left"] font[color="cc3300"]')[0].text.strip()
        의무보유확약비율 = soup.select('tr[height="26"][align="left"] td[align="left"][bgcolor="#FFFFFF"]')[1].text.strip()

        data = [종목명, 종목코드, 상장일, 공모가, 청약경쟁률, 우리사주배정비율, 기관경쟁률, 의무보유확약비율]
    except Exception as e:
        print(f"Error on page {page_num}: {e}")
    return data

# 멀티쓰레딩으로 웹 페이지 데이터 수집
def collect_data(start, end):
    with ThreadPoolExecutor(max_workers=10) as executor:
        futures = [executor.submit(fetch_data, page_num) for page_num in range(start, end)]
        results = [future.result() for future in futures]
    return [result for result in results if result]  # 빈 결과 제거

# 데이터 수집 실행 (시작번호, 끝번호)
data = collect_data(202000000, 202400000)

# 데이터 프레임 생성 및 CSV 저장
df = pd.DataFrame(data, columns=['종목명', '종목코드', '상장일', '공모가', '청약경쟁률', '우리사주배정비율', '기관경쟁률', '의무보유확약비율'])
csv_file_path = 'collected_data.csv'  # 저장 경로 조정
df.to_csv(csv_file_path, index=False, encoding='utf-8-sig')

print(f'Data saved to {csv_file_path}')

'Python' 카테고리의 다른 글

시계열 그래프 그리기 (하위, 상위 그룹별 평균)  (0) 2024.02.29
중복 변수 찾고 데이터 추출  (1) 2024.02.28
Regression_2  (1) 2024.02.18
Regression_1  (0) 2024.02.17
일별종가(시계열 데이터) 시각화  (0) 2024.02.15