[2024/07/16] 프로그래밍 개발일지(5주차 공부 정리)


작업일지 (05~07) (데이터 크롤링)

자동작업RPA 구조설계를 위해
파이썬을 통한 프로그램일지를 작성해보겠다.
향후에는 주식과 업무간 자동으로 업무화가 되도록 시도해볼 것이다.

크롤링기술을 기초부터 연마하기 위해 대표적인 파이썬을 사용하였고,
기본 문법과 클라스,함수등은 알고 있다는 전제하에 시작하였다.

*사용기술은 : 파이썬,셀레니움,openpyxl,SMTP등을 주로 사용하였고,
*크롬이나, 엣지등에서 사용할떄 별도의 드라이버가 필요했다.(ex. 크롬 설정)
*import bs4 from beautifulsoup4 등에 추가 프롬프트가 필요하지만,우선은
동적인 웹을 연결&로드해온다는 가정하에 셀레니움부터 시작.
*그 외 pip install 등을 통해 몇몇개의 install 환경설정이 필요하다.


[크롤링 Method]

기본 import 방법은 아래와 같고,
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"])
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://웹주소")

books_elements = driver.find_element(By.CLASS_NAME, 'prod_item')


좀 더 구체적으로 정리해보자면, (아래는 '삼성전자 주식 정보를 가져오는 식')
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
import time
import requests
from io import BytesIO
from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.drawing.image import Image
from openpyxl.styles import PatternFill, Alignment
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup



# 크롬 드라이버 옵션 설정
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"])


driver = webdriver.Chrome(options=chrome_options)
driver.get("https://www.naver.com")
driver.maximize_window()


time.sleep(1)


sam = driver.find_element(By.ID, 'query')
sam.click()
sam.send_keys('삼성전자 주식')
sam.send_keys(Keys.ENTER)


time.sleep(2)


# 증권정보 더 보기
chart = driver.find_element(
    By.XPATH, '//*[@id="main_pack"]/section[1]/div/div[2]/div[3]/div[2]/div[1]/ul/li[3]/a/strong').click()


# 네이버 검색 창에서 새로운 창으로 열린 증권 페이지를 드라이버가 보게 만들기
new_window = driver.window_handles[1]
driver.switch_to.window(new_window)


# 현재 드라이버가 보고 있는 페이지 URL 확인하기
print(driver.current_url)

time.sleep(3)

chart2 = driver.find_element(By.XPATH, '//*[@id="content"]/ul/li[2]').click()

# 현재 드라이버가 보고 있는 페이지 URL 확인하기
print(driver.current_url)

time.sleep(5)

# driver.quit()




-여기서 주목해야할 명령어는 url이 항시 새로운 탭에서 인식하기 떄문에 별도 드라이버 추가 지정이 필요하다.(다른 링크로 연결하여 오픈하거나 열려고 할시에)
# 컨플루언스 원하는 업체 찾아들어가보기
#ex0) chart = driver.find_element(By.XPATH, '//*[@id="main_pack"]/section[1]/div/div[2]/div[3]/div[2]/div[1]/ul/li[3]/a/strong').click()
new_window = driver.window_handles[0]
driver.switch_to.window(new_window)

-크롤링시 html에서 최신문법으로는 아래와 같으며,
{find.element(By.....XPATH;CSS_SELECTOR;ID,CLASS;link_text;tag_name}등이 있으며 find_elements의 {S}를 통해 element 를 잘 활용하도록 한다.
추가로 클라스가 들어간 것은 문구 앞에 '.'을 붙여주도록 한다.
.
ER_search = driver.find_element((By.XPATH, '//*[@id="plusminus1215924765-0"]'))
ER_search.click()
time.sleep(3)






그 외 html의 기본적인 문법은 파악해야만 했다.
아래 파악하고 만든 기본 공식이다.

[HTML] 기본 문법
<!DOCTYPE html>
<html>
    <head>
        <!-- 문서의 잡다한 정보-->
        <title> 테스트 페이지입니다.</title>
        <style>
            #main-title {color: orange;}
            .sub-title {font-size: 24px;}
            .box {background-color: steelblue; padding: 15px; margin-bottom: 20px ; border-radius:5px;}
            .box > a {color : white:}
            .box > p {color : lightblue:}
        </style>

    </head>
    <body>
        <!-- 화면에 표시되는 내용-->
        <h1 id="main-title"> 효과적인 아웃소싱 운영방안</h1>

        <div class="box">
            <h1 class="sub-title"> 지라와 컨플을 유용하게 다루기 위한 html 통합 대쉬보드 사용
            <p> 각각의 자료도출 및 링크연결 구축</p>
            <a href="https://confluence.nexon.com/pages/viewpage.action?pageId=1466950213"> 지금 시작하기</a>
        </div>

        <div class="box">
            <h1 class="sub-title"> 구축 방향 및 설정</h1>
            <input type="text" placeholder="목표입력">
            <button onlcick="alert(렛츠두잇!)">저장하기</button>
            <ul>
                <li><a href="#">실시간으로 확인하기</li>
                <li><a href="#">크롬 혹은 엣지</li>
                <li><a href="#">알아보기 쉽게!!</li>
            </ul>
        </div>

        <div class="box">
            <h1 class="sub-title"> test</h1>
            <input type="text" placeholder="test">
            <button onlcick="alert(렛츠두잇!)">저장하기</button>
            <ul>
                <li><a href="#">test.page</li>
                <li><a href="#">test.page</li>
                <li><a href="#">test.page</li>
            </ul>
        </div>

    </body>
</html>

문서 형식 선언(Doctype)루트 요소(html)헤드(Head)본문(Body)
<> 부등호  (ex. <p>~~</p>)
p는 파라그래프 며 문단을 나타,div는 division,ul은 unordered list,ol은 ordered list,
href(hyper text reference)는 웹연결을 위한 태그,src는 이미지태그 =(HTML 기본 구조2)
,
주석달때는 ->
<!-- 이 안에 쓰인 내용은 웹 브라우저에게 아무런 영향도 주지 못합니다 -->  



이상 오늘 개발일지를 마친다.




-https://wikidocs.net/book/6353
(=여기는 업무자동화 공부하기 좋은 위키docs.)

-자료 스터디 참고사이트 : 코딩클럽