본문 바로가기
개발/파이썬

웹크롤링_네이버증권 배당 기업정보

by 권이사 2024. 6. 9.

1. 개요

  - 배당주에 투자하기 위해 네이버증권에서 직전 3개년 배당금과 최근연도기준 배당수익률 등 기업정보 크롤링하기

 

 

2. 웹크로링 실행

(1) 라이브러리 설치

pip install requests
pip install bs4

(터미널 열고 requests, beautifulsoup 라이브러리 설치하기)

 

(2) 라이브러리 불러오기

import requests
from bs4 import BeautifulSoup
import csv

 

(3) 데이터 요청 및 추출

url = "https://finance.naver.com/sise/sise_market_sum.naver?&page="

for page in range(1, 5):
    res = requests.get(url + str(page))
    res.raise_for_status()
    soup = BeautifulSoup(res.text, "html.parser")

    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:
            continue
        data = [column.get_text().strip() for column in columns]
        print(data)

(배당페이지 주소창과 나머지 소스 입력 후 실행하면 네이버증권 배당 페이지내 기업정보를 긁어옴)

 

(4) CSV로 저장

filename = "배당주리스트.csv"
f = open(filename, "w", encoding="utf-8-sig", newline="")
writer = csv.writer(f)

title = "종목명	현재가	기준월	배당금	수익률(%)	배당성향(%)	ROE(%)	PER(배)	PBR(배)	1년전	2년전	3년전".split("\t")
writer.writerow(title)

writer.writerow(data)

(네이버증권 페이지에서 표 상단의 제목라인을 드래그하여 그대로 title 태그에 붙여넣기)
(배당주리스트.csv 더블클릭하여 실행하여 확인)
(마우스 우클릭하여 탐색기에서 실행 → 엑셀파일로 열어 필요에 맞게 편집)

 

 

3. 종합

# 라이브러리 불러오기
import requests
from bs4 import BeautifulSoup
import csv

url = "https://finance.naver.com/sise/dividend_list.naver?&page="

# csv로 저장
filename = "배당주리스트.csv"
f = open(filename, "w", encoding="utf-8-sig", newline="")
writer = csv.writer(f)

title = "종목명	현재가	기준월	배당금	수익률(%)	배당성향(%)	ROE(%)	PER(배)	PBR(배)	1년전	2년전	3년전".split("\t")
writer.writerow(title)

# 데이터 요청 및 추출
for page in range(1, 6):
    res = requests.get(url + str(page))
    res.raise_for_status()
    soup = BeautifulSoup(res.text, "html.parser")

    data_rows = soup.find("table", attrs={"class":"type_1 tb_ty"}).find("tbody").find_all("tr")
    for row in data_rows:
        columns = row.find_all("td")
        data = [column.get_text().strip() for column in columns]
        #print(data)
        writer.writerow(data)