HTML & CSS

[45-1 BeautifulSoup] 웹스크래핑, 뷰티풀수프, prettify

Olivia-BlackCherry 2022. 10. 23. 13:13

뷰티풀 수프 이용하여 웹사이트를 스크래핑하기

 

뉴스에서 스크랩을 한다는 것은 내가 원하는 것을 따로 모아 놓는다는 뜻인데, 

Web scraping은 website의 HTML 코드를 확인하고, 원하는 정보를 얻는다는 뜻이다. 

 

우리는 오늘 스프를 만들어볼 것이다.

아름다운 스프

BeautifulSoup말이다!

 

웹사이트는 엄청나게 복잡한 코드로 이루어져 있다. 

뷰티풀 수프는 개발자가 웹사이트를 이해할 수 있도록 도와주는 파이썬 모듈인데,

뷰티풀 수프를 사용하면

이렇게 복잡한 HTML 코드에서 원하는 HTML 요소를  정확하고 빠르게 가져올 수 있다.

즉 여러 정보에서 필요한 정보만쏙 뽑아올 수 있는 것이다.

 

예를 들어보자. 

여기 HTML 문서가 있다.

 

뷰티풀 수프를 이용해서 문서를 가지고 수프를 만들어본다.

 

수프는 아래와 같다.

 

수프에서 파이썬 코드를 이용해서 

내가 원하는 버섯, 면, 소스, 베이컨을 가져오는 방법이다. 

 

링크만 가져올 수도 있다.

 

글자만 가져올 수도 있다.

 

 

그러면 수프를 만드는 방법을 차근차근 배워보자.

1. 뷰티풀 수프 import 하기

from bs4 import BeautifulSoup

 

2. 열고자하는 html파일 열기

with open("website.html") as file:
    contents = file.read()

 

3. 뷰티풀 수프 객체 만들기

soup = BeautifulSoup(contents, "html.parser")

뷰티풀숲 객체를 만들 때, argument 는 두 개이다. 

contents

첫 번째는 soup를 만드는데 무슨 컨텐츠를 사용할지를 적는다. 타입은 markup(html, xml)형식이다.

"html.parser"

두 번째는 parser이다. 파서는 뷰티풀수프가 이 컨텐츠를 이해하는데 도움을 준다. '해당 컨텐츠가 어떻게 구조화된 언어인지' 이해할 수 있도록 파악할 수 있기 때문이다. HTML과 XML 또는 LXML이 파싱 가능하다.

 

 

4. 인코딩 UTF-8 추가하기

만약 여기에서 아래와 같은 에러가 뜬다면 encoding="UTF-8"을 추가하면 간단히 해결된다.

'cp949' codec can't decode byte 0x8f in position 281

with open("website.html", encoding="UTF-8") as file:
    contents = file.read()

 

5. 수프 객체에서 원하는 요소 프린트하기

print(soup.title)

>><title>Angela's Personal Site</title>

 

print(soup.a)

>><a href="https://www.appbrewery.co/">The App Brewery</a>

 

print(soup.title.name)

>>title

 

print(soup.title.string)

>>Angela's Personal Site

 

 

6. prettify로 예쁘게 들여쓰기하여 출력하기

print(soup.prettify())