ITStudy/Python

[Python] BeautifulSoup로 웹 데이터 분석 with DART

Todays Goal 2021. 2. 1. 14:41
728x90
반응형

오늘은 웹 데이터 분석을 위해 BeautifulSoup에 대해서 간단하게 알아보도록 하겠습니다.

 

BeautifulSoup는 HTML 및 XML 데이터 분석을 위한 Python 라이브러리입니다. 지난번에 알아본 urllib 라이브러리와 함께 예제로 활용했던 DART를 활용해보겠습니다.  

 

urllib로 웹 데이터 핸들링 with DART

 

1. BeautifulSoup 설치

  BeautifulSoup는 python.org의 Document의 라이브러리에서 확인할 수 없고 PyPI(Python Package Index)에서 확인할 수 있습니다. 관련 URL> pypi.org/project/beautifulsoup4/

  anaconda를 사용할 경우 자동으로 설치되어 있지만 Python만을 설치한 경우 별도의 설치가 필요합니다.

 

#ln1: easy_install을 이용한 설치
easy_install beautifulsoup

#ln2: pip를 이용한 설치
pip install beautifulsoup4

#ln3: 설치 후 python 프롬프트에서 import 시 에러가 발생하지 않으면 정상적으로 설치된 것입니다.
from bs4 import BeautifulSoup

2. BeautifulSoup테스트

  DART를 사용하기 위해서는 URL 오픈을 위해 urllib 라이브러리도 사용이 필요하기 때문에 먼저 BeautifulSoup만을 가지고 사용하는 법을 살펴보겠습니다.

#ln1: BeautifulSoup 모듈을 import 합니다.
from bs4 import BeautifulSoup    

#ln2: 테스트용 html형식 데이터를 생성합니다.
html = """    
  <html><body>
    <p id="head">안녕하세요</p>     # ln4 실습
    <a id="body" href="www.naver.html">BeautifulSoup 테스트</a>     # ln5 및 ln7 실습
    <a id="body" href="www.daum.net">BeautifulSoup find_all 테스트</a>     # ln6 및 ln7 실습
    <div id="BsTest">     # ln11 실습
      <ul class="top">Bs CSS 테스트
        <li>Bs css1</li>
        <li>Bs css2</li>
      </ul>
   </div>
  </body></html>
"""

#ln3: BeautifulSoup 객체를 생성합니다.
soup = BeautifulSoup(html,'html.parser')     

#ln4:
p1  = soup.html.body.p     # html구조 html > body > p태크 추출합니다.
print(p1.string)     # string메서드를 통해 태그를 제외한 문자열 추출 후 출력합니다.

#ln5:
ph = soup.find(id="head").string     # 태그의 id를 활용하여 추출합니다.
ab = soup.find(id="body").string    # 태그의 id를 활용하여 추출합니다.
print(ph)
print(ab)

#ln6: 여러 개의 <a>태그를 추출합니다.
aA = soup.find_all("a")     
for i in aA:
  href = i.attrs['href']
  text = i.string
  print(text, ">", href)

#ln7:  # css div id #BsTest > class .top > ul을 추출합니다.
cssT = soup.select("div#BsTest > ul.top > li")    
for li in cssT:
  print("li=", li.string)

 

3. urlilib를 사용하여 오픈한 웹 문서로 BeautifulSoup 테스트

  이제 실제 웹페이지 "DART의 삼성전자 공시 RSS"를 가지고 BeautifulSoup로 데이터를 다뤄보겠습니다.

DART 삼성전자 공시 예제

 

#ln1: 웹 문서를 호출하기 위해 urllib.request 모듈을 import 합니다.
import urllib.request as req    
from bs4 import BeautifulSoup

#ln2: 분석 DART URL 오픈
url = "http://dart.fss.or.kr/api/companyRSS.xml?crpCd=00126380"
url_open = req.urlopen(url)

#ln3: BeautifulSoup 객체 생성
soup = BeautifulSoup(url_open, "html.parser")

#ln4: channel > title를 추출합니다.
title = soup.channel.title    
print(title.string)

#ln5: 분석내용 출력
item = soup.find_all("item")
for i in item:
  print(i.title.string, ">", i.guid.string)

urllib 라이브러리와 관련된 사항을 확인 하고 싶으시다면 아래의 링크를 참고해주시기 바랍니다.

 

urllib로 웹 데이터 핸들링 with DART

 

이상 웹 데이터 분석을 위한 BeautifulSoup 라이브러리를 간략하게 알아봤습니다.

728x90
반응형