-
Python 데이터분석 기초 9 - BeautifulSoupPython 데이터 분석 2022. 11. 1. 12:14
# BeautifulSoup 클래스가 제공하는 searching 관련 method from bs4 import BeautifulSoup html_page = """ <html><body> <h1>제목 태그</h1> <p>웹 문서 스크래핑</p> <p>특정 페이지 문서 읽기</p> </body></html> """ print(type(html_page)) soup = BeautifulSoup(html_page, 'html.parser') print(type(soup)) print(soup) print() h1 = soup.html.body.h1 print('h1:',h1) # innerTEXT 형식 print('h1:',h1.string) # innerHTML 형식 print('h1:',h1.text) # innerHTML 형식 print() p1 = soup.html.body.p print('p1:',p1.string) p2 = p1.next_sibling.next_sibling print('p2:',p2.string) print('\n검색용 메소드 : find()') html_page2 = """ <html><body> <h1 id="title">제목 태그</h1> <p>웹 문서 스크래핑</p> <p id="my" class="our">특정 페이지 문서 읽기</p> </body></html> """ soup2 = BeautifulSoup(html_page2, 'html.parser') print(soup2.p, ' ', soup2.p.string) # 최초 p태그만 만난다. print(soup2.find('p').string) # 최초 p태그만 만난다. print(soup2.find(['p', 'h1']).string) # 복수를 사용할 수 있으나 string이 적혀있으므로 뒤에것만 호출된다. print(soup2.find(id='title').string) # id로 검색 print(soup2.find(id='my').string) # id로 검색 print(soup2.find(class_='our').string) # class로 검색, 뒤에 _를 붙여야 된다. print(soup2.find(attrs={'class':'our'}).string) # attrs로도 사용 가능 print(soup2.find(attrs={'id':'my'}).string) # attrs로도 사용 가능 print('\n검색용 메소드 : findAll(), find_all()') html_page3 = """ <html><body> <h1 id="title">제목 태그</h1> <p>웹 문서 스크래핑</p> <p id="my" class="our">특정 페이지 문서 읽기</p> <div> <a href="https://www.naver.com" class="aa">naver</a><br/> <a href="https://www.daum.net" class="aa">daum</a><br/> </div> </body></html> """ soup3 = BeautifulSoup(html_page3, 'html.parser') print(soup3.find_all('p')) # 복수의 p 값을 호출 print(soup3.find_all('a')) print(soup3.find_all(['a','p'])) # 복수의 태그 호출 print(soup3.findAll(class_='aa')) # 같은 class 복수 호출 print(soup3.findAll('p')) print() links = soup3.find_all('a') for i in links: print(i.attrs['href'], ' - ', i.string) print('정규 표현식') import re links2 = soup3.find_all(href=re.compile(r'^https')) for i in links2: print(i.attrs['href'], ' - ', i.string) print('\nCSS의 selector 사용') html_page4 = """ <html><body> <div id="hello"> <a href="https://www.naver.com" class="aa">naver</a><br/> <span> <a href="https://www.daum.net" class="aa">daum</a><br/> </span> <ul class="world"> <li>안녕</li> <li>반가워</li> </ul> </div> <div id="hi" class="good"> second div </div> </body></html> """ soup4 = BeautifulSoup(html_page4, 'html.parser') print(soup4.select_one('div')) # 첫번째 div만 호출 print() print(soup4.select_one('div#hi')) # id가 hi인 div 호출 print(soup4.select_one('div.good')) # class가 good인 div 호출 print() print(soup4.select('div#hello > a')) # 복수 반환 (직계 자식) print(soup4.select('div#hello a')) # 복수 반환 (자손) print(soup4.select('div#hello > span > a')) lis = soup4.select('div#hello ul.world > li') print(lis) msg = list() # [] for i in lis: msg.append(i.string) import pandas as pd df = pd.DataFrame(msg, columns = ['자료']) print(df) <console> <class 'str'> <class 'bs4.BeautifulSoup'> <html><body> <h1>제목 태그</h1> <p>웹 문서 스크래핑</p> <p>특정 페이지 문서 읽기</p> </body></html> h1: <h1>제목 태그</h1> h1: 제목 태그 h1: 제목 태그 p1: 웹 문서 스크래핑 p2: 특정 페이지 문서 읽기 검색용 메소드 : find() <p>웹 문서 스크래핑</p> 웹 문서 스크래핑 웹 문서 스크래핑 제목 태그 제목 태그 특정 페이지 문서 읽기 특정 페이지 문서 읽기 특정 페이지 문서 읽기 특정 페이지 문서 읽기 검색용 메소드 : findAll(), find_all() [<p>웹 문서 스크래핑</p>, <p class="our" id="my">특정 페이지 문서 읽기</p>] [<a class="aa" href="https://www.naver.com">naver</a>, <a class="aa" href="https://www.daum.net">daum</a>] [<p>웹 문서 스크래핑</p>, <p class="our" id="my">특정 페이지 문서 읽기</p>, <a class="aa" href="https://www.naver.com">naver</a>, <a class="aa" href="https://www.daum.net">daum</a>] [<a class="aa" href="https://www.naver.com">naver</a>, <a class="aa" href="https://www.daum.net">daum</a>] [<p>웹 문서 스크래핑</p>, <p class="our" id="my">특정 페이지 문서 읽기</p>] https://www.naver.com - naver https://www.daum.net - daum 정규 표현식 https://www.naver.com - naver https://www.daum.net - daum CSS의 selector 사용 <div id="hello"> <a class="aa" href="https://www.naver.com">naver</a><br/> <span> <a class="aa" href="https://www.daum.net">daum</a><br/> </span> <ul class="world"> <li>안녕</li> <li>반가워</li> </ul> </div> <div class="good" id="hi"> second div </div> <div class="good" id="hi"> second div </div> [<a class="aa" href="https://www.naver.com">naver</a>] [<a class="aa" href="https://www.naver.com">naver</a>, <a class="aa" href="https://www.daum.net">daum</a>] [<a class="aa" href="https://www.daum.net">daum</a>] [<li>안녕</li>, <li>반가워</li>] 자료 0 안녕 1 반가워
BeautifulSoup 사용 방법 및 웹 문서 스크랩핑
참조 사이트 : 영문 https://www.crummy.com/software/BeautifulSoup/bs4/doc/http://dplex.egloos.com/category/Python : BeautifulSoup examplehttp://lxml.de : lxml 라이브러리로 대량의 파일 처리 가능 ---
cafe.daum.net
'Python 데이터 분석' 카테고리의 다른 글
Python 데이터분석 기초 11 - 일정 시간 마다 웹 문서 읽기 (0) 2022.11.01 Python 데이터분석 기초 10 - 웹문서 읽기 (0) 2022.11.01 Python 데이터분석 기초 8 - pandas(산술연산) (0) 2022.10.31 Python 데이터분석 기초 7 - 색인(loc, iloc), 결측값 채우기, 순서 재배치 (0) 2022.10.31 Python 데이터분석 기초 6 - Pandas(Series) 2차원, 배열 (0) 2022.10.31