JJUNNAK's
[ BeautifulSoup4 ] find(), find_all() 차이점. 본문
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() 을 사용했을때는 반복문을 통해서 접근해야한다.
'Crawling' 카테고리의 다른 글
[ Pandas ] 데이터 엑셀, CSV로 저장 & 불러오기 (0) | 2023.01.13 |
---|---|
공공데이터 OpenAPI 사용법 (예제) (0) | 2023.01.13 |
[ Selenium ] 로또 당첨번호 크롤링 예제 (0) | 2023.01.13 |
[ Selenium ] 해외 축구사이트 크롤링 예제 (0) | 2023.01.13 |
[ Selenium ] Selenium 준비과정 (0) | 2023.01.13 |
Comments