Language/Python

BeatifulSoup를 활용한 네이버 주식 시가총액 크롤링하기

은하윤슬 2023. 5. 3. 22:40

Selenium을 공부하기 앞서 BeatifulSoup에 대한 문법을 익히며 네이버 주식 시가총액 크롤링하는 실습을 진행하였습니다.

 

https://finance.naver.com/sise/sise_market_sum.nhn?sosok=1

 

시가총액 : 네이버 증권

관심종목의 실시간 주가를 가장 빠르게 확인하는 곳

finance.naver.com

네이버 증권에 존재하는 시가총액 링크를 활용하여 lxml을 통해 웹페이지를 파싱해 개발자 도구로 해당 테이블을 찾아 각각의 데이터들을 담고 for문을 통해 빈줄 제거를 해줌으로써 csv파일로 만들었습니다.

import csv
import requests
from bs4 import BeautifulSoup

url = "https://finance.naver.com/sise/sise_market_sum.nhn?sosok=0&page="
filename = "시가총액1-200.csv"
f = open(filename, "w", encoding="utf-8-sig", newline="")
title = "N   종목명  현재가	전일비	등락률	액면가	시가총액	상장주식수	외국인비율	거래량	PER	ROE	토론실".split("\t")
writer = csv.writer(f)

writer.writerow(title)

for page in range(1, 5):
    res = requests.get(url + str(page))
    res.raise_for_status()
    soup = BeautifulSoup(res.text, "lxml")
    
    data_rows = soup.find("table", attrs={"class":"type_2"}).find("tbody").find_all("tr")
    for row in data_rows:
        columns = row.find_all("td")
        if len(columns) <= 1: #의미 없는 데이터 skip
            continue
        data = [column.get_text().strip() for column in columns]
        #print(data)
        writer.writerow(data)

 

 

BeautifulSoup 라이브러리의 find 함수를 활용하여 table태그의 type_2 class 안에 있는 tbody 태그 안에 있는 tr태그를 find_all 함수로 데이터들을 전부 가져왔습니다.