updated_at: 2024-12-14 18:04

WebDriver를 이용한 Seibro 배당 정보 가져오기

import pandas as pd
import time
import re
from bs4 import BeautifulSoup

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

class Seibro():
    def __init__(self):
        super().__init__()

    def launchBrowser(self):
        chrome_options = webdriver.ChromeOptions()
        driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
        return driver

    # 태그를 제거 하기 위한 함수
    def remove_tag(self, content):
        cleanr = re.compile('<.*?>')
        cleantext = re.sub(cleanr, '', content)
        return cleantext

    def getdata_dividend(self, driver):
        # for debugging 윈도우 타이틀 확인하기
        print(driver.title)

        isMore = True
        page = 1

        while isMore:
            time.sleep(5)  # 조회가 완료 될 때 까지 시간을 좀 기다려 줘야 한다.
            print('page:' + str(page))
            # 페이지 이동을 추가로 해야 된다.
            try:
                page_move_id = "cntsPaging01_page_" + str(page)
                driver.find_element(By.ID, page_move_id).click()
                time.sleep(1)

                # 데이터 가져오기
                req = driver.page_source
                soup = BeautifulSoup(req, 'html.parser')

                # 원하는 결과가 있는 쪽 결과만 가져온다.
                tbody = soup.find(id="grid1_body_tbody")
                trs = tbody.find_all("tr")

                # 가져온 종목 개수 확인 (한 페이지에 15개 나옴)

                dic_key = (page - 1) * 15

                result_df = pd.DataFrame(columns=range(11))

                for tr_data in trs:
                    tds = tr_data.find_all("nobr")

                    tds[0] = self.remove_tag(str(tds[0]))
                    tds[1] = self.remove_tag(str(tds[1]))
                    tds[2] = self.remove_tag(str(tds[2]))
                    tds[3] = self.remove_tag(str(tds[3]))
                    tds[4] = self.remove_tag(str(tds[4]))
                    tds[5] = self.remove_tag(str(tds[5]))
                    tds[6] = self.remove_tag(str(tds[6]))
                    tds[7] = self.remove_tag(str(tds[7]))
                    tds[8] = self.remove_tag(str(tds[8]))
                    tds[9] = self.remove_tag(str(tds[9]))

                    df = pd.DataFrame(columns=range(10))
                    df.loc[dic_key] = [tds[0], tds[1], tds[2], tds[3], tds[4], tds[5], tds[6], tds[7], tds[8], tds[9]]
                    dic_key = dic_key + 1
                    # 최종 결과에 저장한다. 여기는 Key 값이 들어가서 11개의 column 이 된다.
                    result_df = result_df.append(df)
                print(result_df)

            except Exception as e:
                # 더이상 페이지가 없을 경우 에러 발생
                isMore = False
                
            # 페이지를 올린다.
            page += 1

# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    selbro = Seibro()

    driver = selbro.launchBrowser()
    driver.implicitly_wait(10)
    # 원하는 홈페이지 주소 (배당금 순위를 연도별로 조회할 수 있는 곳으로 이동한다.)
    driver.get('https://seibro.or.kr/websquare/control.jsp?w2xPath=/IPORTAL/user/company/BIP_CNTS01041V.xml&amp;menuNo=285')
    selbro.getdata_dividend(driver)

결과

배당내역전체검색 | SEIBro
page:1
            0           1  2       3   ...       7      8    9    10
0   2023/04/18  2023/04/28     203810  ...     하나은행    보통주    0  NaN
1   2023/04/18                 203810  ...     하나은행    보통주    0  NaN
2   2023/04/18                 203810  ...     하나은행    보통주    0  NaN
3   2023/03/31                 105560  ...     국민은행    보통주    0  NaN
4   2023/03/31                 017670  ...     국민은행    보통주    0  NaN
5   2023/03/31                 008870  ...     하나은행    보통주    0  NaN
6   2023/03/31  2023/05/17     005930  ...  한국예탁결제원    보통주  361  NaN
7   2023/03/31  2023/05/17     005935  ...  한국예탁결제원    우선주  361  NaN
8   2023/03/31                 225190  ...  한국예탁결제원    보통주    0  NaN
9   2023/03/31                 055550  ...  한국예탁결제원    보통주    0  NaN
10  2023/03/31                 05555K  ...  한국예탁결제원  13우선주    0  NaN
11  2023/03/31                 003410  ...  한국예탁결제원    보통주    0  NaN
12  2023/03/31                 097950  ...  한국예탁결제원    보통주    0  NaN
13  2023/03/31                 097955  ...  한국예탁결제원    우선주    0  NaN
14  2023/03/31                 096530  ...     하나은행    보통주    0  NaN

[15 rows x 11 columns]
..................................
평점을 남겨주세요
평점 : 2.5
총 투표수 : 1

질문 및 답글