BeautifulSoup 사용법

2019. 1. 10. 22:00개발자료/Python


반응형

## 테스트 데이터

html = """

<html>

<head>

    <title>title</title>

</head>

<body>

<div class="class_title" id="id_title">제목영역입니다.</div>

<div class="class_content" id="id_content">내용영역입니다.

<div class="class_subcontent" id="id_subcontent">내용의 서브영역입니다.</div>

<a href="http://www.domain.com/1">링크1입니다.</a>

<a href="http://www.domain.com/2">링크2입니다.</a>

</div>

</body>

</html>

""" 


## BeautifulSoup로 html 로딩 및 파싱

from bs4 import BeautifulSoup

bs = BeautifulSoup(html, 'html.parser')



## 태그(Tag) 직접 접근, title 획득

tags = bs.select("title")

print(tags) # 리스트(list)형태 반환

print(tags[0].get_text()) # 인덱스(index) 접근

----- output -----

[<title>title</title>] title



## 하위 태그(Tag)를 검색, 공백사용

tags = bs.select('html head title')

print(tags) # 리스트(list)형태 반환

print(tags[0].get_text()) # 인덱스(index) 접근

----- output -----

[<title>title</title>] title



## 하위 태그(Tag)를 검색, 공백사용

# 공백을 사용할 경우 자식태그(Child Tag)가 아니여도 상관없다.

tags = bs.select('html title') print(tags) # 리스트(list)형태 반환 print(tags[0].get_text()) # 인덱스(index) 접근

----- output -----

[<title>title</title>] title



## 하위 태그(Tag)를 검색, > 사용

title = bs.select('html > head > title') print(title) # 리스트(list)형태 반환 print(title[0].get_text()) # 인덱스(index) 접근

----- output -----

[<title>title</title>] title



## 하위 태그(Tag)를 검색, > 사용

# > 사용할 경우 자식태그만 가능하다

title = bs.select('html > title') print(title) # 리스트(list)형태 반환 print(title[0].get_text()) # 인덱스(index) 접근

----- output -----

[]

--------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-12-c49ff865eb98> in <module> 2 title = bs.select('html > title') 3 print(title) # 리스트(list)형태 반환 ----> 4 print(title[0].get_text()) # 인덱스(index) 접근 IndexError: list index out of range



## 하위 태그(Tag)를 검색

# 꼭 최상위에서 접근할 필요는 없다.

tags = bs.select('head > title')

print(tags) # 리스트(list)형태 반환

print(tags[0].get_text()) # 인덱스(index) 접근

----- output -----

[<title>title</title>] title



## 태그(Tag)와 속성(Attribute)으로 검색

tags = bs.select('a[href]') print(tags) # 리스트(list)형태 반환 print(tags[0].get_text()) # 인덱스(index) 접근

----- output -----

[<a href="http://www.domain.com/1">링크1입니다.</a>, <a href="http://www.domain.com/2">링크2입니다.</a>] 링크1입니다.



## 태그(Tag)의 클래스(class)를 검색

tags = bs.select('.class_title')

print(tags) # 리스트(list)형태 반환 print(tags[0].get_text()) # 인덱스(index) 접근

----- output -----

[<div class="class_title" id="id_title">제목영역입니다.</div>] 제목영역입니다.



## 태그(Tag)와 클래스(class)를 검색

tags = bs.select('div.class_title') print(tags) # 리스트(list)형태 반환 print(tags[0].get_text()) # 인덱스(index) 접근

----- output -----

[<div class="class_title" id="id_title">제목영역입니다.</div>] 제목영역입니다.



## 태그(Tag)의 아이디(id)로 검색

tags = bs.select('#id_title') print(tags) # 리스트(list)형태 반환 print(tags[0].get_text()) # 인덱스(index) 접근

----- output -----

[<div class="class_title" id="id_title">제목영역입니다.</div>] 제목영역입니다.



## 태그(Tag)와 아이디(id)로 검색

tags = bs.select('div#id_title')

print(tags) # 리스트(list)형태 반환 print(tags[0].get_text()) # 인덱스(index) 접근

----- output -----

[<div class="class_title" id="id_title">제목영역입니다.</div>] 제목영역입니다.



## 태그(tag)와 클래스(class)를 이용한 하위 검색, 공백 사용

tags = bs.select('div.class_content div.class_subcontent') print(tags) # 리스트(list)형태 반환 print(tags[0].get_text()) # 인덱스(index) 접근

----- output -----

[<div class="class_subcontent" id="id_subcontent">내용의 서브영역입니다.</div>] 내용의 서브영역입니다.



## 태그(tag)와 클래스(class)를 이용한 하위 검색, > 사용

tags = bs.select('div.class_content > div.class_subcontent') print(tags) # 리스트(list)형태 반환 print(tags[0].get_text()) # 인덱스(index) 접근

----- output -----

[<div class="class_subcontent" id="id_subcontent">내용의 서브영역입니다.</div>] 내용의 서브영역입니다.



## 태그(tag)와 아이디(id)를 이용한 하위 검색, 공백 사용

tags = bs.select('div#id_content div#id_subcontent') print(tags) # 리스트(list)형태 반환 print(tags[0].get_text()) # 인덱스(index) 접근

----- output -----

[<div class="class_subcontent" id="id_subcontent">내용의 서브영역입니다.</div>] 내용의 서브영역입니다.



## 태그(tag)와 아이디(id)를 이용한 하위 검색, > 사용

tags = bs.select('div#id_content > div#id_subcontent') print(tags) # 리스트(list)형태 반환 print(tags[0].get_text()) # 인덱스(index) 접근

----- output -----

[<div class="class_subcontent" id="id_subcontent">내용의 서브영역입니다.</div>] 내용의 서브영역입니다.


반응형

'개발자료 > Python' 카테고리의 다른 글

배열, Array, 리스트, List  (0) 2020.01.29
URL 파싱  (0) 2020.01.24
[Package] KoNLPy  (0) 2019.01.05
setup.py  (0) 2019.01.05
[Package] MySQL Connector Python  (0) 2019.01.04