티스토리 뷰

  • BeautifulSoup은 HTML과 XML을 분석해주는 라이브러리이다.

  • 자체에는 다운로드 기능은 없다.

설치

  • pip install beautifulsoup4 ( or pip3 install beautifulsoup4 )

기본 사용법

from bs4 import BeautifulSoup

# 분석하고 싶은 HTML
html = """
<html><body>
    <h1>스크레이핑이란?</h1>
    <p>웹 페이지를 분석하는 것</p>
    <p>원하는 부분을 추출하는 것</p>
</body></html>
"""

# html 분석하기
soup = BeautifulSoup(html, 'html.parser')

# 원하는 부분 추출하기
h1 = soup.html.body.h1
p1 = soup.html.body.p
p2 = p1.next_sibling.next_sibling

# 요소 출력하기
print('h1 = ', h1.string)
print('p1 = ', p1.string)
print('p2 = ', p2.string)

id 로 요소 찾기

  • find() 메소드로 원하는 요소를 선택 할 수 있다.

from bs4 import BeautifulSoup

# 분석하고 싶은 HTML
html = """
<html><body>
    <h1 id='title'>스크레이핑이란?</h1>
    <p id='body'>웹 페이지를 분석하는 것</p>
    <p>원하는 부분을 추출하는 것</p>
</body></html>
"""

# html 분석하기
soup = BeautifulSoup(html, 'html.parser')

# find() 메소드로 원하는 부분 추출하기
title = soup.find(id='title')
body = soup.find(id='body')

# 요소 출력하기
print('#title = ', title.string)
print('#body = ', body.string)

여러개의 요소 추출하기

  • find_all() 메소드사용

from bs4 import BeautifulSoup

# 분석하고 싶은 HTML
html = """
<html><body>
    <ul>
        <li><a href='http://www.naver.com'>naver</a></li>
        <li><a href='http://www.daum.net'>daum</a></li>
    </ul>
</body></html>
"""

# html 분석하기
soup = BeautifulSoup(html, 'html.parser')

# find_all() 메소드로 추출하기
links = soup.find_all('a')

# 요소 출력하기
for a in links:
    href = a.attrs['href']
    text = a.string
    print(text, '>', href)

DOM요소의 속성

  • DOM(Document Object Model) 이란 XML 또는 HTML의 요소에 접근하는 구조를 나타낸다.

  • DOM 요소의 속성이랑 태그 이름 뒤에 있는 각 속성을 말한다.

urlopen() 과 BeautifulSoup

from bs4 import BeautifulSoup
import urllib.request as req

url = 'http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp'

# urlopen으로 데이터 가져오기
res = req.urlopen(url)

# BeautifulSoup로 분석하기
soup = BeautifulSoup(res, 'html.parser')

# 원하는 데이터 추출
title = soup.find('title').string
wf = soup.find('wf').string
print(title)
print(wf)

CSS 선택자 사용하기

메소드 설명
soup.select_one( 선택자 ) css 선택자로 요소 하나 추출
soup.select ( 선택자 ) css 선택자로 요소 여러 개 리스트로 추출
from bs4 import BeautifulSoup

# 분석대상 html
html = """
<html><body>
<div id='meigen'>
    <h1>위키북스 도서</h1>
    <ul class='items'>
        <li>유니티 게임 이펙트 입문</li>
        <li>스위프트로 시작하는 아이폰 앱 개발 교과서</li>
        <li>모던 웹사이트 디자인의 정석</li>
    </ul>
</div>
</body></html>
"""

# html 분석하기
soup = BeautifulSoup(html, 'html.parser')

# 필요한 부분을 css 쿼리로 추출
# 타이틀 추출
h1 = soup.select_one('div#meigen > h1').string
print('h1 = ', h1)
# 목록 추출
li_list = soup.select('div#meigen > ul.items >li')
for li in li_list:
    print('li = ', li.string)

네이버 금융에서 환율 정보 추출하기

import urllib.request as req
from bs4 import BeautifulSoup

url = 'https://finance.naver.com/marketindex'
res = req.urlopen(url)

soup = BeautifulSoup(res, 'html.parser')

# class가 head_info인 div 태그 안에 class가 value인 span 태그의 첫번째 값 반환
price = soup.select_one('div.head_info > span.value').string
# id가 exchangeList인 ul 태그 안에  class가 value인 모든 span 태그를 리스트로 반환 
usd = [tag.string for tag in soup.select('ul#exchangeList span.value')]

print('환율은', usd)
print('달러 환율은 ', price)

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함