JJUNNAK's

[ BeautifulSoup4 ] find(), find_all() 차이점. 본문

Crawling

[ BeautifulSoup4 ] find(), find_all() 차이점.

최낙준 2023. 1. 13. 04:26

api 를 이용한 크롤링 과정에서

텍스트가 추출되지 않는 문제가 발생했다.

오류 
A = bs_obj.find_all("태그")
print(A.get_text())
print(A.text)

에러 메세지를 해석하면 ResultSet 객체는 text 와 get_text 의 속성을 가지지 않는다고 한다.

 B = bs_obj.find("태그") 
print(B.text)
print(B.get_text())

하지만 위와 같이 find() 함수로 추출된 객체에 사용하면 정상적으로 결과가 나오는것을 확인할 수 있다.

A 와 B 모두 같은 ResultSet 타입인데 왜 결과가 다른걸까?

이유는 find() 함수와 find_all() 의 차이점에 있다.

find() 함수는 사용되는 속성이 html 내에 여러개가 있어도 1가지의 결과만을 추출한다.

하지만 find_all() 은 모든 속성의 결과들을 추출하여 복수개의 결과를 가지게 된다.

쉽게말해서

find() 는 단일결과

find_all() 는 복수개의 결과이기 때문에

find_all() 로 추출된 ResultSet의 텍스트에 접근할 때에는

반복문을 사용하여 접근해야한다.

multiple = obj.find_all("태그") # 여러개의 결과값
for i in multiple:
    print(i.text)
    print(i.get_text())

위와 같이 실행하면 정상적인 결과가 나온다.

다음과 같이 리스트에 저장하여 활용할 수도 있다.

result = []
multiple = obj.find_all("태그") # 여러개의 결과값
for i in multiple:
   result.append(i.text)

print(result)
​

 

[ 요약 ]

find() 함수를 쓸때는 괜찮지만 find_all() 을 사용했을때는 반복문을 통해서 접근해야한다.

Comments