데이터 수집을 하기 위한 방법 중 CSS 선택자를 활용하여 원하는 데이터를 가져올 수가 있는데요.

오늘은 CSS 선택자에 대해 알아보도록 하겠습니다.

 

1. 선택자 기본 서식

서식 설명
* 모든 요소를 선택
<요소 이름> 요소 이름을 기반으로 선택
.<클래스 이름> 클래스 이름 기반으로 선택
#<id 이름> id 속성을 기반으로 선택

 

2. 선택자들의 관계를 지정하는 서식

서식 설명
<선택자>, <선택자> 쉼표로 구분된 여러 개의 선택자를 모두 선택
<선택자> <선택자> 앞 선택자의 후손 중 뒤 선택자에 해당하는 것을 모두 선택
<선택자> > <선택자> 앞 선택자의 자손 중 뒤 선택자에 해당하는 것을 모두 선택
<선택자> + <선택자> 같은 계층에서 바로 뒤에 있는 요소를 선택
<선택자> ~ <선택자> 선택자1부터 선택자2까지의 요소를 모두 선택

 

3. 선택자 속성을 기반으로 지정하는 서식

서식 설명
<요소>[<속성>] 해당 속성을 가진 요소를 선택
<요소>[<속성>=<값>] 해당 속성의 값이 지정한 값과 같은 요소를 선택
<요소>[<속성>~=<값>] 해당 속성의 값이 지정한 값을 단어로 포함(띄어쓰기로 구분해서 완전히 포함)하고 있다면 선택
<요소>[<속성>|=<값>] 해당 속성의 값으로 시작하면 선택(이때 하이픈 기호로 구분해서 확인)
<요소>[<속성>^=<값>] 해당 속성의 값이 지정한 값으로 시작하면 선택
<요소>[<속성>$=<값>] 해당 속성의 값이 지정한 값으로 끝나면 선택
<요소>[<속성>*=<값>] 해당 속성의 값이 지정한 값을 포함하고 있다면 선택

 

4. 예제로 살펴보기

다음과 같은 HTML 구성이 있을 때,

 

html = '''

<ul id='fruits'>

    <li id='apple'>Apple</li>

    <li id='banana'>Banana</li>

    <li id='orange'>Orange</li>

    <li id='mango'>Mango</li>

    <li id='melon'>Melon</li>

</ul>

'''

 

mango를 추출하기 위해 사용할 수 있는 선택자를 살펴보겠습니다.

 

from bs4 import BeautifulSoup

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

 

fruit = lambda q: print(soup.select_one(q).string)

fruit("#mango")

fruit("li#mango")

fruit("ul > li#mango")

fruit("#fruits #mango")

fruit("#fruits > #mango")

fruit("#ul#fruits > li#mango")

fruit("li[id='mango']")

 

혹은

 

(주의) 0부터 시작할 경우 3은 4번째 요소가 된다

print(soup.select("li")[3].string)

print(soup.find_all("li")[3].string)

 

결과는

mango

mango

mango

mango

mango

mango

mango

mango

mango

가 될것입니다.

 

 

+ Recent posts