import requests
from bs4 import BeautifulSoup
import pandas as pd
from concurrent.futures import ThreadPoolExecutor
# 개별 페이지 처리 함수
def fetch_data(page_num):
data = []
try:
# 공모정보 페이지
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()
# 수요예측 페이지
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 |