BeautifulSoup SELECT 정리 및 사용법
python BeautifulSoup
파이썬 BeautifulSoup은 HTML 문서를 분석 할 수 있는 라이브러리 입니다.
이를 이용하여 HTML 태그에 쉽게 접근 하고 데이터를 추출할 수 있습니다.
BeautifulSoup은 find(), select()등 여러가지 있는데,
하나만 제대로 알고 있어도 데이터를 추출하는 큰 어려움이 없습니다.
SELECT 기능과 사용법을 정리합니다.
BeautifulSoup 패키지 설치
pip install bs4
간단한 사용법*
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()은 조건에 맞는 태그를 한개(여러개가 있어도 한개만 가져옵니다.)
아래는 네이버 쇼핑의 핫딜 부분을
크롤링한 샘플 코드입니다.
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
Comments
Login: