본문 바로가기
환급 챌린지!

[패스트캠퍼스 수강 후기] 머신러닝 인강 100% 환급 챌린지 15회차 미션

by 빅데이터1020 2020. 11. 2.
SMALL

안녕하세요.

패스트 캠퍼스 수강후기 - 머신러닝과 데이터 분석 A-Z 15회차 미션 시작합니다!

머신러닝 인강 후기 15회차는 beautifulsoup에 대해 공부합니다.

 

패스트 캠퍼스 강의에서 제공하는 실습파일을 보면서 강사님의 지시에 따라 실습을 따라하시면 됩니다.

 

" beautifulsoup 모듈 사용하여 HTML 파싱하기 (parsing) "

파싱은 html 문서 내에서 원하는 값만 추출한다는 의미입니다.

 

1) beautifulsoup 모듈 사용하기

from bs4 import BeautifulSoup

 

2) html 문자열 파싱

문자열로 정의된 html 데이터를 파싱합니다.

html = 'html 을 담아주면 됩니다'

 

3) find 함수

특정 html tag 를 검색할 수 있게 합니다. 검색 조건을 명시하여 찾고자 하는 tag를 검색할 수 있습니다.

 

우선 변수에 html을 담습니다.

soup = BeautifulSoup(html)

 

h3에 담긴 값을 찾기 위해 find 함수로 h3을 찾습니다.

soup.find('h3') #<h3 title="Good Content Title">Contents Title</h3>

 

예제에서는 h3이 한 개여서 원하는 부분을 잘 찾았습니다.

만약 find함수로 찾으려는 부분이 html에 한 개 이상 있을 경우 어떻게 될까요??

soup.find('p') #<p>Test contents</p>

find 함수는 가장 먼저 찾은 부분을 반환시킵니다.

 

여러 개의 속성을 한꺼번에 입력하고 싶을 때는 attrs (attributes, 속성)을 사용하면 됩니다. attrsdict형태입니다.

attrs = {'id': 'upper', 'class': 'test'}
soup.find('div', attrs=attrs)

 

4) find_all 함수

find가 조건에 만족하는 하나의 tag만 검색한다면,

find_all은 조건에 맞는 모든 tag를 리스트로 반환합니다.

soup.find('p')
 #<p>Test contents</p>
 
soup.find_all('p')
#[<p>Test contents</p>, <p>Test Test Test 1</p>, <p>Test Test Test 2</p>, <p>Test Test Test 3</p>]

 

5) get_text 함수

tag 안의 value를 추출할 때 쓰는 함수입니다.

부모 tag의 경우, 모든 자식 tagvalue를 추출합니다.

tag = soup.find('h3')

print (tag) #<h3 title="Good Content Title">Contents Title</h3>
print (tag.get_text()) #Contents Title

 

" id, class 속성을 이용하여 원하는 값 추출하기 "

1) 다음 뉴스 데이터 추출

뉴스기사에서 제목, 작성자, 작성일, 댓글 개수를 추출합니다.

tag를 추출할 때는 가낭 그 tag를 쉽게 특정할 수 있는 속성을 사용합니다.

id의 경우 원칙적으로 한 html 문서 내에서 유일합니다.

 

추출을 위해 모듈을 입력합니다.

import requests
from bs4 import BeautifulSoup

 

2) 기사 제목 추출하기

# 타이틀 추출하기
url = 'https://news.v.daum.net/v/20190728165812603'
resp = requests.get(url)
soup = BeautifulSoup(resp.text)
title = soup.find('h3', class_='tit_view')
print (title.get_text()) #일론머스크 "테슬라에서 넷플릭스·유튜브 즐길 날 온다"

 

3) 기사 작성자, 작성일자 추출하기

# 작성자, 작성일자 추출하기
url = 'https://news.v.daum.net/v/20190728165812603'
resp = requests.get(url)
soup = BeautifulSoup(resp.text)
print (soup.find_all('span', class_='txt_info')[0])
#<span class="txt_info">이민우</span>

print (soup.find_all('span', class_='txt_info')[1])
#<span class="txt_info">입력 <span class="num_date">2019.07.28. 16:58</span></span>

 

4) paragraph 추출하기

# paragraph 추출하기
url = 'https://news.v.daum.net/v/20190728165812603'
resp = requests.get(url)
soup = BeautifulSoup(resp.text)
container = soup.find('div', id='harmonyContainer')

contents = ''

for p in container.find_all('p'):
	contents += p.get_text()

print (contents)

content를 출력하면 아래 그림처럼 깔끔하게 텍스트만 추출되는 것을 확인할 수 있습니다.

 

 

 

머신러닝 인강 최강자를 만나고 싶으면!? https://bit.ly/3lZfGmn

LIST