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 |