본문 바로가기

카테고리 없음

파이썬 크롤링 BeautifulSoup select, select_one 태그 속성 100% 활용하기

BeatutifulSoup을 이용할 때 CSS 선택자를 이용하면 원하는 태그를 손쉽게 찾을 수 있습니다. ID와 CLASS 값이 있는 경우라면 더 쉽습니다. 그런데 사실 태그의 속성에는 아이디와 클래스 이외에도 활용하면 더 도움이 되는 값들이 많이 있습니다. 찾고자 하는 태그의 속성 값을 조회하면 특정 요소를 집어내는 것이 더 명확할 테니까요.

 

이번 포스팅에서는 select, select_one 메서드에 태그 속성 값을 함께 넣어서 원하는 태그를 찾는 방법을 알아보겠습니다.

 

예시로 사용할 soup 객체를 만들겠습니다.

 

from bs4 import BeautifulSoup

html = """
<li class="site">
  <a href="http://www.testsite.co.kr/fashion/" class="good-info"></a> 
  <a href="http://www.testsite.co.kr/food/" class="good-info"></a>
  <a href="http://www.testsite.co.kr/contact/" class="good-info"></a>
  <a href="http://www.testsite.co.kr/news/1" class="good-info"></a>
  <a href="http://www.worldwideweb.co.kr/about/" class="good-info"></a>
  <a href="http://www.worldwideweb.co.kr/contact/" class="good-info"></a>
  <a href="http://www.worldwideweb.co.kr/news/" class="good-info"></a>
  <a href="http://www.fruits.co.kr/apple/"></a>
  <a href="http://www.fruits.co.kr/pear/"></a>
</li>
"""

soup = BeautifulSoup(html)

 

속성(attribute)의 값이 특정 값과 정확히 일치하는 경우: =

href의 값이 특정 문자(열)와 정확하게 일치하는 태그를 가져오는 코드입니다. 조건에 일치하는 태그는 1개입니다.

 

equal = soup.select("a[href='http://www.testsite.co.kr/fashion/']")
print(equal)

# [<a class="good-info" href="http://www.testsite.co.kr/fashion/"></a>]

 

속성(attribute)의 값이 특정 값으로 시작하는 경우: ^= 

href의 값이 특정 문자(열)로 시작하는 태그를 가져옵니다. 조건에 일치하는 태그는 4개입니다.

 

start_with = soup.select("a[href^='http://www.testsite.co.kr/']")
print(start_with)

# [<a class="good-info" href="http://www.testsite.co.kr/fashion/"></a>, 
# <a class="good-info" href="http://www.testsite.co.kr/food/"></a>, 
# <a class="good-info" href="http://www.testsite.co.kr/contact/"></a>, 
# <a class="good-info" href="http://www.testsite.co.kr/news/1"></a>]

 

속성(attribute)의 값이 특정 값으로 끝나는 경우: $= 

href의 값이 특정 문자(열)로 끝나는 태그를 가져옵니다. 조건에 일치하는 태그는 2개입니다.

 

end_with = soup.select("a[href$='contact/']")
print(end_with)

# [<a class="good-info" href="http://www.testsite.co.kr/contact/"></a>, 
# <a class="good-info" href="http://www.worldwideweb.co.kr/contact/"></a>]

 

속성(attribute)의 값이 특정 값을 포함하는 경우: *= 

href의 값이 특정 문자(열)를 포함하는 태그를 가져옵니다. 조건에 일치하는 태그는 2개입니다.

 

contain = soup.select("a[href*='news']")
print(contain)

# [<a class="good-info" href="http://www.testsite.co.kr/news/1"></a>, 
# <a class="good-info" href="http://www.worldwideweb.co.kr/news/"></a>]

 

박스 제목

class의 값이 특정 문자(열)와 같지 않은 태그를 가져옵니다. 조건에 일치하는 태그는 2개입니다.

 

not_equal = soup.select("a[class!='good-info']")
print(not_equal)

# [<a href="http://www.fruits.co.kr/apple/"></a>, 
# <a href="http://www.fruits.co.kr/pear/"></a>]

 

 

- 이 글은 아나콘다(Anaconda3)가 설치된  주피터 노트북에서 작성되었습니다.