본문 바로가기
Python/Python Crawling

파이썬 크롤링, BeautifulSoup으로 정보 가져오기

by 워니 wony 2019. 5. 9.

BeautifulSoup이란?

BeautifulSoup은 별도 설치가 필요한 라이브러리이다.

 

파이참을 사용한다면 아래 링크에서 설치하는 방법을 참고하길 바란다.

[Python Crawling] - 파이썬 크롤링 기본, requests와 re & BeautifulSoup 개념 및 설치

 

파이썬 크롤링 기본, requests와 re & BeautifulSoup 개념 및 설치

크롤링을 하기 위해서 설치해야 하는 것이 2개 있음 원하는 사이트의 정보를 가져오기 사용하는 requests 패키지 사이트의 모든 정보를 가져온 다음 내가 원하는 것을 추출하기 위해서 필요한 라

developsd.tistory.com

 

 

HTML 소스를 활용하여 특정 노드를 선택할 수 있는 라이브러리로 웹 크롤링을 하는 경우 기본적으로 사용하게 되는 라이브러리이다. 

BeautifulSoup 라이브러리를 제대로 사용하기 위해서는 HTML 태그에 대한 기본 이해가 있어야 한다.

class, id  선택자, 태그 이름 정도는 구분하고 선택해서 사용할 줄 알아야 제대로 사용이 가능하다.

 

 

BeautifulSoup 예제 : 네이버

requests를 활용해서 네이버 html 소스를 가져와서 BeautifulSoup을 사용한다.

네이버 소스 코드 중에 아래와 같은 내용이 있어서 해당 부분의 정보를 가져오고자 한다.

<span class="naver_logo">네이버</span></a>

 

ㅇ 네이버 소스 코드 중 일부

<div class="special_bg">
<div class="area_flex">
<div class="area_logo">
<h1>
<a data-clk="top.logo" href="/"><span class="naver_logo">네이버</span></a>
</h1>
</div>
<div class="area_links">
<a data-clk="top.mkhome" href="http://help.naver.com/support/alias/contents2/naverhome/naverhome_1.naver" class="al_favorite">네이버를 시작페이지로<span class="al_ico_link"></span></a>
<span class="al_bar"></span>
<a data-clk="top.jrnaver" href="http://jr.naver.com" class="al_jr"><span class="blind">쥬니어네이버</span><span class="al_ico"></span></a>
<a data-clk="top.happybean" href="http://happybean.naver.com/main/SectionMain.nhn" class="al_happybean"><span class="blind">해피빈</span><span class="al_ico"></span></a>
</div>
<div id="search" class="search">

 

 

 

 

 

ㅇ 파이썬 코드

  • requests를 활용하여 html 소스 코드를 가져온다.
  • BeautifulSoup의 경우 html.content를 가져와야 처리가 가능하다. 
    • bs_html = BeautifulSoup(html.content,"html.parser")
    • 위의 소스 코드는 HTML 소스 코드를 class, 태그로 선택 할 수 있는 형태로 만드는 코드이다
  • 태그를 선택할 수 있는 형태로 만들었으면, find( )메소드로 원하는 태그를 선택한다.
    • bs_html.find("태그 형태명",{"class":"클래스명"})
    • 태그 형태명에는 p태그, h1태그, div 태그, span태그, 사용자 태그 등을 쓸 수 있다.
    • class 부분은 id 등으로 변경 가능하다.
  • 해당 태그 영역 부분이 선택되면 html 태그 소스까지 함께 보여지기 때문에 태그 안의 정보만 필요한 경우에는 .text를 붙여서 해당 문자 정보만 가져올 수 있다.
import requests
from bs4 import BeautifulSoup

url = "http://www.naver.com"

html = requests.get(url)
bs_html = BeautifulSoup(html.content,"html.parser")

naver_logo = bs_html.find("span",{"class":"naver_logo"})

print(naver_logo)
print(naver_logo.text)

(결과값)

 

반응형

댓글