soup 객체를 생성하고 HTML 문서를 출력(prettify)
# HTML 문서의 데이터를 가져오기 위해 import
from bs4 import BeautifulSoup
page = open('sample.html', 'rt', encoding='utf-8').read() # HTML 파일 읽고 문자열 리턴
soup = BeautifulSoup(page, 'html.parser') # Soup 객체 생성
# Soup 객체를 이용하여 문서를 출력
print(soup.prettify())
BeautifulSoup은 HTML 문서 내의 데이터를 검색해서 작업하기 편리한 클래스이다. 위의 코드와 같이 HTML 문서의 데이터를 가져오기 위해 bs4 패키지 내부의 BeautifulSoup을 import 한다. BeautifulSoup 함수의 생성자에 page 인자를 넘기고 'html.parser'를 사용하면 HTML 문서를 읽고 처리할 수 있다. 그리고 soup이라는 검색이 용이한 객체를 만들어서 내부의 prettify 함수를 사용하면 HTML 문서를 보기 좋게 가공하여 출력할 수 있다.
특정 태그를 모두 검색(find_all)
# HTML 문서의 데이터를 가져오기 위해 import
from bs4 import BeautifulSoup
page = open('sample.html', 'rt', encoding='utf-8').read() # HTML 파일 읽고 문자열 리턴
soup = BeautifulSoup(page, 'html.parser') # Soup 객체 생성
# HTML 문서 내부에 있는 <p>태그를 모두 검색
print(soup.find_all('p'))
특정 태그를 모두 검색하기 위해서는 find_all() 함수를 사용해야 한다. 이 함수를 위의 코드와 같이 사용하면, 문서 내부의 <p> 태그를 모두 검색할 수 있다.
특정 태그 하나만 검색(find)
# HTML 문서의 데이터를 가져오기 위해 import
from bs4 import BeautifulSoup
page = open('sample.html', 'rt', encoding='utf-8').read() # HTML 파일 읽고 문자열 리턴
soup = BeautifulSoup(page, 'html.parser') # Soup 객체 생성
# HTML 문서 내부에 있는 <p>태그 하나만 검색
print(soup.find('p'))
특정 태그의 개수가 너무 많다면 find() 함수를 사용하여 특정 태그의 '1개'만 검색할 수도 있다. 결과를 확인해보면 검색하고자 하는 특정 태그 중에 가장 처음의 하나를 찾아 반환한다.
# HTML 문서의 데이터를 가져오기 위해 import
from bs4 import BeautifulSoup
page = open('sample.html', 'rt', encoding='utf-8').read() # HTML 파일 읽고 문자열 리턴
soup = BeautifulSoup(page, 'html.parser') # Soup 객체 생성
# HTML 문서 내부에 있는 <p>태그 하나만 검색
# print(soup.find('p'))
print(soup.find('p').get_text())
find 함수에서 get_text를 사용하면 다른 정보(tag, id 등)를 제외한 텍스트 파일만 가져온다.
# HTML 문서의 데이터를 가져오기 위해 import
from bs4 import BeautifulSoup
page = open('sample.html', 'rt', encoding='utf-8').read() # HTML 파일 읽고 문자열 리턴
soup = BeautifulSoup(page, 'html.parser') # Soup 객체 생성
# <p>태그를 찾아서 내부의 문자열만 출력
for tag in soup.find_all('p'):
print(tag.get_text())
for문을 사용하면 HTML 문서 전체의 특정 태그(='p')를 찾아 내부의 문자열만 연속해서 출력 가능하다.
특정 스타일을 이용하여 검색의 범위를 좁히는 방법(find_all, class_)
# HTML 문서의 데이터를 가져오기 위해 import
from bs4 import BeautifulSoup
page = open('sample.html', 'rt', encoding='utf-8').read() # HTML 파일 읽고 문자열 리턴
soup = BeautifulSoup(page, 'html.parser') # Soup 객체 생성
# HTML 문서 내부에 있는 <p>태그 중에 class="outer-text"만 검색
print(soup.find_all('p', class_='outer-text'))
find_all() 함수에서 class_ 옵션을 사용하면 위의 코드처럼 특정 클래스가 포함된 문자열이 포함되어 검색되기 때문에 검색의 범위를 좁힐 수 있다.
특정한 태그를 사용하지 않고 속성을 사용하여 검색(find_all, id)
# HTML 문서의 데이터를 가져오기 위해 import
from bs4 import BeautifulSoup
page = open('sample.html', 'rt', encoding='utf-8').read() # HTML 파일 읽고 문자열 리턴
soup = BeautifulSoup(page, 'html.parser') # Soup 객체 생성
#태그의 id속성이 id="first"인 경우를 검색
print(soup.find_all(id='first'))
find_all() 함수에서 id 옵션을 사용하면 특정한 id 속성값(='first')이 포함된 문자열을 포함하여 검색할 수 있다.
결론
파이썬의 BeautifulSoup 모듈을 사용하면 HTML 문서 내부의 데이터를 쉽게 크롤링 할 수 있다. 그리고 BeautifulSoup 모듈은 문서의 태그, 특정 스타일의 태그, 내부의 콘텐츠만 가져오는 기능이 있다.
'언어 > Python' 카테고리의 다른 글
[Python] Jupyter Notebook(쥬피터 노트북) 활용 (0) | 2020.07.15 |
---|---|
[Python] Python(파이썬) 데이터 분석 환경 구축 (0) | 2020.07.10 |
[Python] 웹 크롤링의 이해와 BeautifulSoup 설치 (1) | 2020.07.05 |
[Python] HTML문서를 BeautifulSoup과 re모듈을 사용(결합)해서 검색하기 (0) | 2020.04.20 |
[Python] Python(파이썬) 시스템과 랜덤함수 (0) | 2020.04.12 |