www.yes24.com/Product/Goods/42496558
파이썬을 이용한 머신러닝, 딥러닝 실전 개발 입문
BeautifulSoup, scikit-learn, TensorFlow를 사용하여 실무에 머신러닝/딥러닝을 적용해 보자!인공지능, 머신러닝, 딥러닝은 바둑, 의료, 자동차 등 이미 다양한 분야에서 성공적인 성과를 보여주고 있다. ��
www.yes24.com
블로그의 모든 내용은 해당 책을 읽고 포스팅하는 내용입니다!
BeautifulSoup를 이용해 데이터를 스크래핑 해보자. (기초!)
BeautfulSoup 설치
anaconda Prompt를 켜고, " pip3 install beautifulsoup4 "를 입력해주자. 내 껀 이미 설치되어 있는듯..
그리고 막상 실행해보면 bs4를 찾을 수 없다고 한다. 설치해주자. " pip install bs4 "를 입력해주자.
우선 HTML을 문자열로 만들어, 파싱하는 방법을 배워보자.
from bs4 import BeautifulSoup
html = """
<html><body>
<h1>스크레이핑이란?</h1>
<p>웹 페이지를 분석!</p>
<p>원하는 부분 추출!</p>
</body></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("p = ",p1.string)
print("p = ",p2.string)
BeautifulSoup 객체를 만들 때, 첫 번째 매개변수에는 html을 넣어주고, 두 번째 매개변수에는 분석할 매개변수의 종류를 지정한다. 여기에서는 html을 직접 문자열로 만들어 넣었다.
대락 html의 구조를 이용해 원하는 요소를 추출할 수 있다라는 것을 알고 넘어가면 될 듯.
이번에는 find_all()을 이용해 여러 개의 태그를 한번에 추출해 보자. 마찬가지로 직접 html을 문자열로 만들어 사용한다.
from bs4 import BeautifulSoup
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>
"""
soup = BeautifulSoup(html, "html.parser")
links = soup.find_all("a")
for a in links:
href = a.attrs['href']
text = a.string
print(text, ">", href)
find_all 메소드를 이용해 <a>태그를 모두 추출한다. 그리고 모든 원소에 대해 attrs['href']를 이용해, attrs 속성에서 href 속성을 추출한다고 하는데,, 사실 무슨 말인지 잘 와닿진 않는다. 아무든 href="링크" 의 링크 스트링을 추출할 수 있는 것 같다.
DOM = Document Object Model : XML 또는 HTML의 요소에 접근하는 구조
DOM 요소의 속성 : 태그 이름 뒤에 있는 속성 (ex) 위 예시에서 <a> 태그 뒤의 href )
이 DOM 요소의 속성을 추출해보자.
위의 코드에서 알 수 있듯이, prettify() 메소드를 이용해 soup이 정상적으로 분석을 진행했는지 확인 할 수 있다.
soup.p.a를 확인에 <p>로, <a>로 접근해서 변수 a에 태그 <a>를 할당하는 것 같다.
a.attrs의 타입은 dict 타입이고, 해당 dict 안에 'href'(DOM 요소)가 있다.
urlopen()과 조합해서 전의 기상청 RSS 내용을 추출해보자.
from bs4 import BeautifulSoup
import urllib.request as req
url = "http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp"
res = req.urlopen(url)
soup = BeautifulSoup(res, "html.parser")
title = soup.find("title").string
wf = soup.find("wf").string
print(title)
print(wf)
soup까지는 전과 같은 내용이지만, find 메소드를 이용해 title과 wf 태그를 추출한 내용. 실행 결과는 다음과 같다.
CSS 선택자 사용하기?
soup.select_one(<a>)는 요소 하나.
soup.select(<a>)는 요소 여러개를 리스트로 추출.
from bs4 import BeautifulSoup
html = """
<html><body>
<div id = "meigen">
<h1>위키북스 도서</h1>
<ul class="items">
<li>유니티 게임 이펙트 입문</li>
<li>으아아아아아아아</li>
<li>우오오오오오오오</li>
</ul>
</div>
</body></html>
"""
soup = BeautifulSoup(html, "html.parser")
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)
h1에서 볼 수 있듯이, h1에 해당하는 요소 하나를 h1에 저장하고, div > ul > li에 해당하는 모든 요소를 리스트에 저장한다.
'머신러닝 딥러닝 입문' 카테고리의 다른 글
[Jupyter Notebook / BeautifulSoup] 환률 정보 스크래핑 해보기 (0) | 2020.10.21 |
---|---|
[Jupyter Notebook / urllib] 데이터 다운로드 (0) | 2020.10.20 |