본문 바로가기
방구석코딩/주식 크롤링 분석

[파이썬] 주식 크롤링 매크로화(3) - 선택항목 체크(입력) 함수적용

by 석세상 2024. 7. 31.
반응형

앞에서 체크박스 해제하는 부분까지 코드를 확인하고 함수정의화 할 부분과 그렇지 않은 부분의 코드를 확인하고 필요한 부분은 함수정의까지 생성했다. 다음은 선택항목 체크하는 부분에 대해 함수적용에 대해 알아보자.

1. 코드분석

아래 코드 내용을 살펴보면 첫줄은 체크박스 클릭을 통해 선택할 항목들이다. 이 부분은 원하는 항목이 달라지면 변경이 필요한 부분이다. 두번째 줄은 웹 페이지에서 name이 fielfIds인 엘리먼트를 찾는다.

 

for문에서 if 전까지는 tag namelabel인 것들을 찾는다. if문은 slct_item의 항목들이 앞에서 찾은 라벨에 있는 라벨명이 있으면 클릭하라는 명령어다.

 

다음으로 마지막 두 줄은 클릭하여 선택한 항목들의 데이터가 보일 수 있도록 적용하기 버튼을 클릭하는 명령어이다.

slct_item = ['거래량','시가','고가','저가','매수호가','매도호가']

chkboxs =  browser.find_elements(By.NAME, 'fieldIds')

for chkbox in chkboxs :
    parent = chkbox.find_element(By.XPATH, '..')            # 윗단계인 td로 가는 명령, XPATH를 이용해서 윗단계로 갈 수 있음, 
                                                            # By는 경로를 이동할 때 사용하는 것으로 보임
                                                            # .. 이 상위 단계로 가는 값으로 보임
    label = parent.find_element(By.TAG_NAME, 'label')       # parent 하위 label 태그를 찾는 방법, TAG_NAME은 명령문으로 봐야함
#    print(label)
#    print(label.text)                                      # 라벨을 잘 불러왔는지 확인용

    if label.text in slct_item :                            # label.text : 라벨이라는 객체안의 text값을 가져옴
        chkbox.click()                                      # 체크박스 체크

# 적용하기 버튼 클릭하기
# 적용하기 버튼을 클릭해야 데이터가 변경됨
button = browser.find_element(By.XPATH, '//a[@href="javascript:fieldSubmit()"]')
button.click()

 

앞의 코드의 자세한 내용을 보고싶다면 아래 링크 내용을 참고하길 바란다.

 

[파이썬] 주식 데이터 크롤링(5) - 웹 브라우저 체크박스 선택 (selenium)

앞에서 파이썬을 이용하여 주식데이터 크롤링을 위해 체크박스를 해제하는 부분까지 진행하였다. 그러면 이제 웹 브라우저에서 내가 원하는 항목의 체크박스를 클릭하는 방법에 대해 알아보겠

gusugi.tistory.com

 

2. 함수적용

그러면 위의 코드에서 반복수행해야 할 부분은 두번째 줄인 chkbox부터이다. 앞의 slct_item의 항목들은 한번 처리하고 나면 다른 항목들도 바꿔줘야 하기 때문이다.

 

그러면 함수 적용하는 부분과 함수를 적용한 코드는 다음과 같다.

# 함수정의 미적용 부분
slct_item = ['거래량','시가','고가','저가','매수호가','매도호가']

# 함수적용 부분
def select_item_chk() :
    chkboxs =  browser.find_elements(By.NAME, 'fieldIds')
    
    for chkbox in chkboxs :
        parent = chkbox.find_element(By.XPATH, '..')            # 윗단계인 td로 가는 명령, XPATH를 이용해서 윗단계로 갈 수 있음, 
                                                                # By는 경로를 이동할 때 사용하는 것으로 보임
                                                                # .. 이 상위 단계로 가는 값으로 보임
        label = parent.find_element(By.TAG_NAME, 'label')       # parent 하위 label 태그를 찾는 방법, TAG_NAME은 명령문으로 봐야함    
        
        if label.text in slct_item :                            # label.text : 라벨이라는 객체안의 text값을 가져옴
            chkbox.click()                                      # 체크박스 체크

    # 적용하기 버튼 클릭하기
    # 적용하기 버튼을 클릭해야 데이터가 변경됨
    button = browser.find_element(By.XPATH, '//a[@href="javascript:fieldSubmit()"]')
    button.click()
    
    
    # 실행
    select_item_chk()

함수명은 select_item_chk로 지정하였고, 그 아래 모든 문장은 들여쓰기를 해주었다. 여기서 중요한 부분이 있는데 기존의 들여쓰기 부분도 모두 한번 더 들여쓰기를 적용해주어야 원하는 코드대로 실행할 수 있다.

 

코드를 확인해보면 기존의 들여쓰기 되어있는 부분들이 한번 더 들여쓰기 되어있는 것을 확인할 수 있다. 앞에서 체크박스 해제하는 명령문과 마찬가지로 def 부분은 함수를 정의하는 것이고 실제로 실행은 select_item_chk()를 실행해야 결과가 생성되는 것을 볼 수 있다.

 

그리고 함수정의가 미적용된 slct_item 부분은 실제로 코드를 실행할 때 어느곳에 배치해야 하는지 염두해 두어야 한다.

 

다음 단계부터는 함수정의에 있어 코드 변경이 많이 일어나는 부분이라고 생각한다. 굳이 내가 수정하려는 코드대로 따라하지 않아도 되지만 나름대로 변경하는 부분에 의미가 있고, 중요한 부분이라고 판단해서다.

728x90
반응형

댓글