bs4에서는 대표적으로 select와 find를 통해 태그에 접근하게 된다. 개인적으로는 find보다 select가 편하기에 자주 사용하는 편이다. 단 어떤 것을 쓰던지 결과는 동일하다.
셀렉트는 select와 select_one이 있는데, 크롤링을 처음 접한다면 개념이 어려울 수 있다. 쉽게 말하면 select는 결과값이 리스트로 반환되고, select_one은 그렇지 않다.
아래의 예시를 보면 이해가 빠를 것이다.
html= """
<html>
<a class="click" href="naver.com"> 네이버링크 </a>
<a class="click1" href="daum.net"> 다음링크 </a>
</html>
"""
soup = BeautifulSoup(html,"html.parser")
data = soup.select("a")
print(data)
>> [<a class="click" href="naver.com"> 네이버링크 </a>, <a class="click1" href="daum.net"> 다음링크 </a>]
2.select_one을 사용할 경우
soup = BeautifulSoup(html,"html.parser")
data = soup.select_one("a")
print(data)
>> <a class="click" href="naver.com"> 네이버링크 </a>
select_one은 문서의 처음부터 시작하여 조건에 맞는 하나를 찾게 된다. 반면 select는 모든 a태그를 찾아 리스트에 담게 된다.
따라서 select_one은 바로 .text ["href] 등을 적용하는 것이 가능하다.
soup = BeautifulSoup(html,"html.parser")
data = soup.select_one("a")
title = data.text
link = data["href"]
하지만 select의 경우에는 for 문을 통해 다시 개별요소에 접근을 해야한다.
soup = BeautifulSoup(html,"html.parser")
data = soup.select("a")
for i in data:
title = i.text
link=i["href"]
#index를 알고 있고 인덱스번호가 1이라면 아래와 같이 접근도 가능하다.
data = soup.select("a")[1]
title = data.text
link=data["href"]