[웹크롤링] 정적 웹크롤링 BeautifulSoup

requests모듈을 이용해서 HTTP요청을 보내고 응답을 받아 body내용을 확인해보았습니다.

하지만, 이 경우에 원하는 요소만 가져올 수 없어서 분석하기에 어려운 점이 있었습니다.

HTML Parsing

HTTP Parser을 사용하는 모듈인 BeautifulSoup를 이용해서 원하는 요소만 가져오도록 하겠습니다.

 

BeautifulSoup 설치

pip install beautifulsoup4
# or pip install bs4

노트북 환경(.ipynb)에서 실행하기 위해서는 %를 이용합니다. 

 

 BeautifulSoup은 HTML Parser이기 때문에 HTML 파일이 필요합니다. 이를 위해 requests.get로 HTML 사이트 요청을 하고 응답 받아보겠습니다.

res를 그대로 사용하지 않고 HTML parser에 전달하여 분석해보겠습니다. 

이를 위해서 bs4를 불러와줍니다.

from bs4 import BeautifulSoup

불러온 bs4를 사용하기 위한 객체를 생성해줍니다.

첫번째 인자에는 respose의 body를 text로 전달하고, 두번째 인자에는 "html"을 분석한다는 것을 명시해줍니다.

soup = BeautifulSoup(res.text, "html.parser")

만든 객체가 담긴 soup의 .prettify()를 활용해 보기 좋게 변환해줍니다. 

들여쓰기 등을 통해 예쁘게 출력된 것을 확인 할 수 있습니다. 

 

이제 soup 객체를 통해 title, head, body와 같이 원하는 HTML의 요소를 가져 올 수 있습니다. 

soup.title
soup.head
soup.body

soup.find("태그"), soup.find_all()

원하는 요소를 찾을 수 도 있습니다.

만약 <h1> 태그로 감싸진 요소를 찾고 싶다면, soup.find("h1") 과 같이 find 메소드로 찾을 수 있습니다.

태그에 포함된 여러개의 값을 가져오고 싶다면 .find_all()을 사용하면 됩니다. 리스트 타입으로 <p>태그를 가지는 모든 값을 가져오게 됩니다. 

 

 

태그의 이름과 내용을 가져 올 수 도 있습니다.

 

 

🔜 이어지는 다음 글 보기 BeautifulSoup를 통해 네이버 뉴스 데이터 웹스크래핑