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()
이것을 해석해보면 ResultSet
이 get_text
를 지원하지 않는단 말이다.
이 오류를 해결하기 위해서는 ResultSet
타입인 list를 for문
을 사용하여 인덱스로 뽑아 tag하나씩 text
, get_text()
를 해주면 된다.
count_cmt = ''
for tag in count_list:
count_cmt += tag.text
count_cmt
원하는 결과값이 나왔다.
끝.
'python > data crawling' 카테고리의 다른 글
8. selenium (3) - webdriverWait (0) | 2023.02.15 |
---|---|
7. selenium 모듈 (2) - 다음뉴스 웹사이트 크롤링 (0) | 2023.02.15 |
6. selenium 모듈 (1) (0) | 2023.02.14 |
사이트에서 가격 정보 data crawling (0) | 2023.02.14 |
정규표현식으로 tag 찾기 & 정규표현식 정리 (0) | 2023.02.14 |