티스토리 뷰
-
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)
'Machine Learning' 카테고리의 다른 글
크롤링과 스크레이핑 - 로그인이 필요한 사이트에서 다운받기 (0) | 2020.09.17 |
---|---|
크롤링과 스크레이핑 - 링크에 있는 것 내려받기 (0) | 2020.09.17 |
크롤링과 스크레이핑 - CSS 선택자 (0) | 2020.09.17 |
크롤링과 스크레이핑 - urllib.request를 이용한 데이터 다운로드 (0) | 2020.09.17 |
Docker (0) | 2020.09.16 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- SPARK
- Disk Scheduling
- HDFS
- I/O Mechanisms
- gradle
- File Protection
- Disk System
- Flume
- Spring
- JSON
- hadoop
- maven
- 빅데이터 플랫폼
- Replacement Strategies
- I/O Services of OS
- RAID Architecture
- oracle
- SQL
- 하둡
- Free space management
- 빅데이터
- Java
- linux
- mapreduce
- springboot
- vmware
- Variable allocation
- aop
- jdbc
- Allocation methods
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함