스크래핑 하려는 페이지가 테이블로 이루어져 있고 해당 데이터가 필요한 경우 BeautifulSoup보다는 Pandas를 이용하는 편이 좀 더 쉽게 보입니다.
참고
https://ggondae.tistory.com/52?category=475184
Pandas를 이용해 간단하게 구현해보겠습니다.
import pandas as pd
# 네이버 시가 총액 URL
# 맨 마지막 page 변수 부분이 페이징 값
NAVER_URL = 'https://finance.naver.com/sise/sise_market_sum.nhn?&page='
temp_list = []
for cnt in range(1, 4):
# 페이지 1번부터 HTML 읽어오기 (3페이지까지 총 150위)
# header 옵션은 컬럼으로 사용할 행을 지정하는 것으로 여기서는 의미 없음
# encoding 옵션이 없으면 한글 깨짐
df = pd.read_html(NAVER_URL+str(cnt), header=0, encoding='euc-kr')
# 읽어 온 페이지 중 두번째 테이블(df[1])이 데이터 부분 (첫번째 테이블(df[0])은 항목 옵션 체크하는 부분)
# NaN 부분 삭제를 위해 행 방향으로 N컬럼이 NaN인 것을 삭제 후 다른 변수에 복사
# axis=0은 행, 1은 열
temp_df = df[1].dropna(axis=0, subset=['N']).copy()
# float형인 N컬럼을 int형으로 변환
temp_df['N'] = temp_df['N'].astype(int)
# N 컬럼의 이름을 순위로 변경
temp_df.rename(columns={'N':'순위'}, inplace=True)
# 맨 마지막 컬럼인 토론실은 필요 없어 삭제
temp_df.drop(['토론실'], axis=1, inplace=True)
# DataFrame를 모두 연결 위해 리스트에 저장
temp_list.append(temp_df)
# 리스트 내 DataFrame을 연결하여 DataFrame으로 저장
result_df = pd.concat(temp_list)
# 엑셀 저장
# 현재 저장된 DataFrame의 index는 NaN을 삭제하면서 의미가 없어 삭제
result_df.to_excel('sise.xlsx', index=False)
DataFrame을 이용해서 몇 줄 안되는 코드로 엑셀 저장까지 완료하였습니다.
반응형
'RPA > Python' 카테고리의 다른 글
[Pandas] chatGPT가 만들어준 RPA (네이버 시가총액 크롤링) (0) | 2023.06.21 |
---|---|
[BeautifulSoup, selenium] 동적 스크롤 페이지 스크래핑 (0) | 2021.05.14 |
[BeautifulSoup] 기업 시가총액 순위, 엑셀/CSV로 저장 (0) | 2021.05.13 |
[BeautifulSoup] 웹 스크래핑 (WEB Scraping) 환경 설정 및 기초 (0) | 2021.05.12 |
[openpyxl, python-pptx] 엑셀 주소록 읽어 파워포인트로 명찰 만들기 (0) | 2021.05.09 |