안녕하세요.
패스트 캠퍼스 수강후기 - 머신러닝과 데이터 분석 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, 속성)을 사용하면 됩니다. attrs는 dict형태입니다.
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의 경우, 모든 자식 tag의 value를 추출합니다.
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
'환급 챌린지!' 카테고리의 다른 글
[패스트캠퍼스 수강 후기] 머신러닝 인강 100% 환급 챌린지 17회차 미션 (0) | 2020.11.04 |
---|---|
[패스트캠퍼스 수강 후기] 머신러닝 인강 100% 환급 챌린지 16회차 미션 (0) | 2020.11.03 |
[패스트캠퍼스 수강 후기] 머신러닝 인강 100% 환급 챌린지 14회차 미션 (0) | 2020.11.01 |
[패스트캠퍼스 수강 후기] 머신러닝 인강 100% 환급 챌린지 13회차 미션 (0) | 2020.10.31 |
[패스트캠퍼스 수강 후기] 머신러닝 인강 100% 환급 챌린지 12회차 미션 (0) | 2020.10.30 |