-
Python: BeautifulSoup 라이브러리 정리(find, find_all, 태그, 클래스, id, 속성)Python 2021. 6. 2. 23:14
BeautifulSoup란?
인터넷 문서의 구조에서 명확한 데이터를 추출하고 처리하는 가장 쉬운 라이브러리
1. find로 태그 추출하기
find(name, attrs, recursive, string, **kwargs)
from urllib.request import urlopen from bs4 import BeautifulSoup a = urlopen('https://www.naver.com/') # a를 호출해 html을 parser soup = BeautifulSoup(a.read(), 'html.parser') # soup에서 h1 tag 하나를 가져온다. print(soup.find('h1'))
<h1 class="logo_default"> <a class="logo_naver" data-clk="top.logo" href="/"><span class="blind">네이버</span></a> </h1>
from urllib.request import urlopen from bs4 import BeautifulSoup a = urlopen('https://www.naver.com/') # a를 호출해 html을 parser soup = BeautifulSoup(a.read(), 'html.parser') # soup에서 h1 tag 하나를 가져온다. print(soup.h1)
<h1 class="logo_default"> <a class="logo_naver" data-clk="top.logo" href="/"><span class="blind">네이버</span></a> </h1>
2. find_all로 해당 태그 모두 추출하기
find_all(name, attrs, recursive, string, **kwargs)
기준에 맞는 태그를 모두 가져오기 때문에 리스트 타입을 반환한다.
from urllib.request import urlopen from bs4 import BeautifulSoup a = urlopen('https://www.naver.com/') # a를 호출해 html을 parser soup = BeautifulSoup(a.read(), 'html.parser') # soup에서 div tag를 모두 가져온다. print(soup.find_all('div'))
</div> <div class="atcmp_footer"> <span class="side_opt_area"> <span class="opt_item"><a data-clk="sly.help" href="https://help.naver.com/support/service/main.help?serviceNo=605&categoryNo=1991" target="_blank">도움말</a></span> </span> <span class="rside_opt_area"> <span class="opt_item"> <!-- [AU] _keywordOnOff 클래스를 추가해주세요. --> <a class="close _keywordOnOff" href="#">자동저장 끄기</a> </span> </span> </div> </div> ...
1) 해당 태그의 class를 기준으로 호출하기
from urllib.request import urlopen from bs4 import BeautifulSoup a = urlopen('https://www.naver.com/') # a를 호출해 html을 parser soup = BeautifulSoup(a.read(), 'html.parser') # soup에서 div tag의 class가 corp_area인 태그를 가져온다. b = soup.find_all("div", "corp_area") print(b)
[<div class="corp_area" data-clk-prefix="plc"> <h3 class="blind">네이버 정책 및 약관</h3> <ul class="list_corp"> <li class="corp_item"><a data-clk="intronhn" href="https://www.navercorp.com">회사소개</a></li> <li class="corp_item"><a data-clk="recruit" href="https://recruit.navercorp.com/naver/recruitMain">인재채용</a></li> <li class="corp_item"><a data-clk="contact" href="https://www.navercorp.com/naver/proposalGuide">제휴제안</a></li> <li class="corp_item"><a data-clk="service" href="/policy/service.html">이용약관</a></li> <li class="corp_item"><a data-clk="privacy" href="/policy/privacy.html"><strong>개인정보처리방침</strong></a></li> <li class="corp_item"><a data-clk="youth" href="/policy/youthpolicy.html">청소년보호정책</a></li> <li class="corp_item"><a data-clk="policy" href="/policy/spamcheck.html">네이버 정책</a></li> <li class="corp_item"><a data-clk="helpcenter" href="https://help.naver.com/">고객센터</a></li> </ul> <address class="addr"><a data-clk="nhn" href="https://www.navercorp.com" target="_blank">ⓒ NAVER Corp.</a></address> </div>]
2) 해당 태그의 id를 기준으로 호출하기
from urllib.request import urlopen from bs4 import BeautifulSoup a = urlopen('https://www.naver.com/') # a를 호출해 html을 parser soup = BeautifulSoup(a.read(), 'html.parser') # soup에서 div tag의 속성 중 id가 account인 태그를 모두 가져온다. c = soup.find_all('div', {'id': 'account'}) print(c)
[<div class="sc_login" id="account"> <h2 class="blind">Sign in</h2> <p class="login_msg">Connect with people</p> <a class="link_login" data-clk="log_off.login" href="https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fwww.naver.com"><i class="ico_naver"><span class="blind">NAVER</span></i>Sign in</a> <div class="sub_area"> <div class="look_box"> <a class="link_look" data-clk="log_off.searchid" href="https://nid.naver.com/user/help.nhn?todo=idinquiry">Forgot Username</a> <a class="link_look" data-clk="log_off.searchpass" href="https://nid.naver.com/nidreminder.form">Password</a> </div> <a class="link_join" data-clk="log_off.registration" href="https://nid.naver.com/nidregister.form?url=https%3A%2F%2Fwww.naver.com">Sign up</a> </div> </div>]
3. text 추출하기
from urllib.request import urlopen from bs4 import BeautifulSoup a = urlopen('https://www.naver.com/') # a를 호출해 html을 parser soup = BeautifulSoup(a.read(), 'html.parser') d = soup.find('div', {'id': 'account'}) # tag의 text만 추출한다. print(d.text) # find_all로 가져오면 리스트형태로 가져오기 때문에 # 개별값에 대해서 text를 해주어야 한다.
Sign in Connect with people NAVERSign in Forgot Username Password Sign up
4. 음악 순위 크롤링하기
from urllib.request import urlopen from bs4 import BeautifulSoup url = urlopen("https://music.bugs.co.kr/chart?wl_ref=M_left_02_01") soup = BeautifulSoup(url.read(), 'html.parser') # td 태그에 check라는 class가 있는 td 태그를 모두 가져온다. musics = soup.find_all('td', "check") # musics의 각 태그들에 대해서 for i, music in enumerate(musics): # input 태그안에 title 속성값을 parsing한다. print("{}위: {}".format(i+1, music.input['title'])) # print("{}위: {}".format(i + 1, music.find('input')['title']))
1위: Butter 2위: Next Level 3위: 안녕 (Hello) 4위: 헤픈 우연 5위: Dun Dun Dance . . . 95위: 살다가 96위: METEOR 97위: 잠이 오질 않네요 98위: 다정히 내 이름을 부르면 99위: Bang! 100위: 너의 발걸음에 빛을 비춰줄게 (Prod. 조영수)
반응형'Python' 카테고리의 다른 글
python: Pillow 라이브러리 정리 (0) 2021.06.07 python: pandas 라이브러리 정리 (0) 2021.06.06 Python: matplot 라이브러리 정리 (선, 막대, 산포도, 파이, 히스토그램) (0) 2021.05.31 Python: numpy 라이브러리 정리(indexing, slicing, 정규분포 난수) (0) 2021.05.30 Python: Pillow 라이브러리 정리(이미지 편집, 이미지 필터, tkinter활용) (0) 2021.05.02