작성
·
243
·
수정됨
0
# 내 코드
import requests
from bs4 import BeautifulSoup
res = requests.get('https://davelee-fun.github.io/index.html')
soup = BeautifulSoup(res.content,'html.parser')
mydata = soup.find_all('a','nav-link')
for i in mydata:
print(i.get_text())
저는 코드를 이렇게 작성해봤는데요 결과적으로 Blog와 About이 잘 나왔습니다. (저는 find_all 함수 사용했습니다.)
그런데 mydata = soup.find_all('a','nav-link') 이 문장에서 굵게 표시된 부분을 a.nav-link로 적으면 아무것도 출력이 안되는데 왜 안되는지 궁금합니다. 태그명.class명 이렇게 하는 방법은 css selector에서만 허용되는 걸까요?
코드 그대로 select일 때는 가능합니다.
답변 1
0
안녕하세요. 답변도우미입니다.
네, 맞습니다. 'a.nav-link'
와 같은 CSS 선택자 방식의 표현은 BeautifulSoup의 select
메서드와 함께 사용됩니다. 이는 select
메서드가 CSS 선택자를 지원하기 때문입니다.
반면에, find_all
메서드는 태그 이름과 속성을 별도의 인자로 받습니다. 따라서 find_all('a', 'nav-link')
와 같이 사용하여 'a' 태그 중에서 'nav-link'라는 클래스를 가진 태그를 찾을 수 있습니다.
다시 말해, 'a.nav-link'
와 같은 표현은 CSS 선택자이므로 select
메서드와 함께 사용되어야 합니다. 이는 BeautifulSoup의 설계 방식에 따른 것으로, find_all
과 select
가 서로 다른 방식으로 웹 페이지의 요소를 찾는다고 이해하면 됩니다.
따라서, find_all('a', 'nav-link')
로 코드를 작성하신 것은 올바릅니다. 이렇게 하면 'a' 태그 중에서 'nav-link' 클래스를 가진 모든 태그를 찾아내는 것이 가능합니다.
감사합니다.