python/data crawling

9. find_all 과 find의 차이점

Abokadoh 2023. 2. 15. 15:36

find_all 은 list 형식안에 tag들을 뽑아낸다. 때문에 find_all로 반환된 리스트를 get_text로 text만 뽑아내기 위해서는 for문을 돌려야한다.

우선, 인터넷 기사의 html문을 불러와서, BeautifulSoup으로 보기좋게 만들었다.

내가 찾고 싶은 것은 인터넷 기사에 달린 ‘댓글의 수’이다. 댓글은 span tag에 num_cmt 어쩌구 에 들어가있는 것을 확인할 수 있다.

 

find함수를 써서 count를 뽑아보겠다.

count = soup.find('span', class_ = 'num_cmt alex-count-area')

결과는 tag로 나온다.

이 tag값에서 text를 빼내는 함수는 get.text()이다.  

.text도 됨

count.get_text()
#or
count.text

 

💡 get_text 함수를 사용할 때는 꼭 ()를 써줘야 한다.

 

그런데

 

만약. 댓글의 수가 아닌 여러개가 동일한 tag로 이루어져있는 text들은 어떻게 뽑아낼 것인가? find_all 혹은 select 함수를 사용해야 할 것이다.

 

이것을 사용해서 태그를 뽑아보자.

count_list = soup.select('span.num_cmt')

결과는 위와 같이 리스트 형태로 출력될 것이다. 이것을 그대로 전과 같은 방법으로 뽑아보겠다.

count_list.text
#or
count_list.get_text()

이것을 해석해보면 ResultSetget_text를 지원하지 않는단 말이다.

 

이 오류를 해결하기 위해서는 ResultSet타입listfor문을 사용하여 인덱스로 뽑아 tag하나씩 text, get_text()를 해주면 된다.

count_cmt = ''
for tag in count_list:
        count_cmt += tag.text

count_cmt

원하는 결과값이 나왔다.

 

끝.