본문 바로가기
프로그래밍/Python

생초보도 할 수 있는 파이썬 웹 크롤링 - 웹페이지 정보 추출 #2

by 머니테크리더 2023. 4. 28.
반응형

파이썬 웹크롤링 #2 대표 이미지
파이썬 웹크롤링 #2 대표 이미지

🔖 INDEX

     

    지난번 블로그 내용

     

    생초보도 할 수 있는 파이썬 웹 크롤링 - 웹페이지 정보 추출 #1

    주로 Visual Studio C++ 언어를 다루던 필자가 파이썬으로 전환하게 되면서, 프로그래머로서 새로운 언어를 습득하는 필요성을 느꼈습니다. 이번 글에서는 동일한 상황에 처한 독자들을 위해 파이썬

    moneylogging.tistory.com

     

     

    에 이어서 수신한 Web page 내용을 분석하여 원하는 내용을 추출해 내는 방식에 대해서 도전해보려 합니다.

     

    BeautifulSoup 사용하기

    파이썬에서는 Text 형식의 Web page 데이터에서 원하는 HTML 요소에 접근하여 정보를 얻어올 수 있도록 도와주는 Beautifulsoup를 제공합니다.

    soup = BeautifulSoup(response.text, "html.parser")

    위와 같이 BeautifulSoup 객체를 이용하여 원하는 HTML 요소에 접근할 수 있도록 준비합니다.

    그렇다고 원하는 부분만 작성한 후 컴파일하면 위와 같은 에러가 발생합니다. BeautifulSoup 객체를 사용하기 위하여 앞선 방식과 동일하게 해당 객체를 import 하여야 합니다.

    from bs4 import BeautifulSoup

    install 과정 없이 컴파일 시 아래와 같은 에러가 발생합니다. 따라서, beautifulsoup4 install이 필요합니다. 

    솔루션탐색기 >> "env (Python 3.7 (64-bit))" 마우스 우클릭하여 "여기서 명령 프롬프트 열기.." 메뉴를 선택합니다.

     

    프롬프트가 뜨면, 아래와 같이 명령합니다.

    pip install beautifulsoup4

    일련의 과정을 거쳐서 Beautifulsoup 객체를 에러 없이 얻어올 수 있습니다. 

     

     

    웹페이지 정보 추출하기

    여러 가지 정보들이 해당 Web page에 담겨있으나, 금일은 현재가격을 얻어오는 것을 목표로 하고 진행하려고 합니다. 해당 Web page에서 현재가격이 담겨 있는 HTML 구조는 아래와 같습니다.

    <p class="no_today">
    <em class="no_up">
    <span class="blind">76,600</span>
    <span class="no7">7</span><span class="no6">6</span><span class="shim">,</span><span class="no6">6</span><span class="no0">0</span><span class="no0">0</span>
    </em>
    </p>

    많은 Web page 내용 중 위와 같은 내용만을 추출하기 위해서 Select 명령을 사용합니다.

    no_today = soup.select_one('p.no_today')

    select_one()은 여러 결과에 대해서 가장 위의 결과 1개만을 제공합니다.

    위의 내용을 기존 코드에 작성한 후 컴파일한 결과는 아래와 같습니다.

     

     

    위의 HTML 구조에서 현재가격 76,600을 가져오기 위하여 아래와 같이

    blind = no_today.select_one('span.blind')

    select_one()을 사용하여 코드를 추가하였습니다.

    컴파일 결과는 아래와 같습니다.

     

    최종적으로 blind.text를 통해 76,600이라는 값을 추출하는 데 성공하였습니다.

    파이썬 언어를 사용하여 몇 줄 되지 않는 코드로 원하는 값을 추출할 수 있는 경험을 했습니다. 만약 MFC(Visual C++)를 사용하여 해당 기능을 개발하려면 훨씬 더 많은 시간과 코딩이 필요할 것으로 생각됩니다.

    다음으로, UDP 통신 방식을 사용하여 추출한 값을 5초마다 다른 프로세스로 전달하는 내용에 대해 작성하고자 합니다. 파이썬으로 심도 있는 Server/Client application을 개발하는 것은 어렵기 때문에, 간단한 웹 크롤링 등을 파이썬으로 개발하고, Socket 통신을 통해 원하는 데이터를 MFC로 개발된 Application에 제공하여, 해당 Application의 Load를 줄일 수 있다고 생각합니다. 이러한 방법으로, 파이썬과 MFC를 조합하여 더욱 효율적인 개발을 할 수 있습니다.

     

     

    댓글