BeautifulSoup SELECT 정리 및 사용법

python BeautifulSoup

파이썬 BeautifulSoup은 HTML 문서를 분석 할 수 있는 라이브러리 입니다.

이를 이용하여 HTML 태그에 쉽게 접근 하고 데이터를 추출할 수 있습니다.
BeautifulSoup은 find(), select()등 여러가지 있는데,
하나만 제대로 알고 있어도 데이터를 추출하는 큰 어려움이 없습니다.


SELECT 기능과 사용법을 정리합니다.

BeautifulSoup 패키지 설치

1
pip install bs4


간단한 사용법*

1
2
3
4
from bs4 import BeautifulSoup
html = """<html><head></head><body>test data</body></html> """
soup = BeautifulSoup(html, 'html.parser')
print(soup.select_one('body').text)

위 그림과 같이 html 문서의 body태그 안에 있는
test data를 문자를 가져오는 간단한 소스입니다.


SELECT 설명

select(), select_one() 설명
태그이름 태그이름으로 찾음
.클래스이름' 클래스이름으로 찾음
#아이디이름' 아이디이름으로 찾음 (아이디는 연속X)
상위태그이름>자식태그>자식태그' 부모 자식간의 태그 조회' >' 로 구분
상위태그이름 자손태그' 부모 자손간의 태그 조회 #띄어쓰기(공백) 로 구분 #자식을 건너 띈다.
[속성]' 태그 안의 속성을 찾음
태그이름.클래스이름' 해당태그의 클래스이름을 찾음
#아이디이름 > 태그이름.클래스이름 아이이디 이름으로 찾고 자식태그와 클래스이름으로 찾음


***

※ select()는 조건에 맞는 태그를 여러개 가져옵니다.(1개만 가져와도 타입이 select_one와 다릅니다.)
※ select_one()은 조건에 맞는 태그를 한개(여러개가 있어도 한개만 가져옵니다.)




아래는 네이버 쇼핑의 핫딜 부분을
크롤링한 샘플 코드입니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import requests 

from bs4 import BeautifulSoup
def get_soup(url):      

      res = requests.get(url)       
      if res.status_code == 200:            
            return BeautifulSoup(res.text, 'html.parser')

def selectEx(s):  
      print("자식태그  (>) : ",s.select("div.section_cell>div>h3>strong")[0].text)  
      print("#자손 태그 (띄어쓰기) : ", s.select("div.section_cell strong")[0].text)  
      print("#아이디 태그 조합", s.select("#t134953 div.tit_area strong")[0].text) 
      print("=======================")      
      print(s.select("#t134953 div.list_type a")[0])
      print("=======================")
      print(s.select("#t134953 div.list_type a span.txt")[0].text)      
      print(s.select("#t134953 div.list_type a")[0]['href'])      
      print("=======================")
      print()
      print(s.select("#t134953 div.list_type a img"))      
      print(s.select("#t134953 div.list_type a img")[0]['src'])
      print("=======================")      
      print(s.select("#t134953 div.list_type a>span.txt")[0].text)            
      print("=======================")      
      for tags in s.select("#t134953 div.list_type ul>li"):
            print(tags)
            print("img link :", tags.select_one('img')['src'])
            print("a txt : ", tags.select_one('a span.txt').text)
            print("a link :", tags.select_one('a')['href'])
            print("a txt :", tags.select_one('a>span.txt').text)
            print("price :", tags.select_one('span.price>em').text)
            print(tags.select('span.list_tag span'))            
            print("hot deal : ", "".join([v.text for v in tags.select('span.list_tag span')]))            
            print("#####################################") 
      print("@@@@@@@@@@ select() 와 select_one()")
      print(s.select_one("div.section_cell div li a").text) #select_one와 select의 차이(여러개가 있지만 하나만 가져온다.)
      print(    s.select("div.section_cell div li a")[0].text) 
      print(    s.select("div.section_cell div li a")[1].text) 

if __name__ == '__main__':
      s = get_soup('https://shopping.naver.com/')
      selectEx(s)

TAG: #bs4 #BeautifulSoup #requests #select #select_one #crawling