• 목록
  • 아래로
  • 위로

안녕하세요?


Beautifulsoup에서 .find(text=True, recursive=False)과 관련하여 질문 드립니다.



대략 다음과 같은 html 소스와 파이썬 스크립트가 있다고 가정하면요.


from bs4 import BeautifulSoup

html  = '<span class="member"><span class="lv-icon lv-100">100</span> <img src="https://able.net/data/member/abc.gif"> 댄스</span>'
soup = BeautifulSoup(html, 'html5lib')



member = soup.select_one('span.member').find(text=True, recursive=False).strip()


=> '' (none)


member = soup.select_one('span.member').find(text=True).strip()


=> 100


member = soup.select_one('span.member').text

=> 100  댄스



위와 같은 결과가 나오는데요.


text=True 옵션은 .text 메서드와 같은 결과를 리턴하고, recursive=False는 child를 제외한 해당 element만 선택한다고 알고 있는데요.


첫번째에서 ' 댄스'가 나오고, 두번째에서는 세번째와 같은 결과가 나와야 하는 것이 아닌가 하는 생각을 했는데요.



구글링해보니 다음과 같은 글이 있기는 한데 직관적으로 이해가 되지 않네요.


"If used with find_all or find, text=true looks for every tags with texts inside it while get_text() returns the text from your found tags."


출처: https://stackoverflow.com/questions/46124681/difference-and-when-to-use-text-true-and-get-text



제가 어디에서 실수를 하거나, 어느 부분에서 잘못 생각한 것인지 여쭤봅니다 ㅠㅠ


어제와 오늘 이 부분에서 막혀서 고민했는데 제 실력에서는 도저히 답이 안 나오네요~


그럼 즐거운 2020년의 첫 불금 되세요 ^-^


항상 감사드립니다!


작성자
이니스프리 119 Lv. (0%) 2175700/115200000EXP

Make StudyForUs Great Again!

 

CSVpuymXAAAVVpd.jpg

댓글 2

title: 황금 서버 (30일)humit
profile image

soup.select_one('span.member').find(text=True, recursive=False)

=> 100의 사이에 있는 공백이 나오게 됩니다. 그래서 여기에서 strip() 함수를 적용하면 빈 문자가 나오게 됩니다.

 

2번째 경우에는 find로 찾기 때문에 마찬가지로 첫 번째 텍스트 노드인 100이 반환됩니다. 만약 find 부분을 find_all로 바꾸면 3개의 원소가 반환되는 것을 확인할 수 있습니다.

 

3번째 경우인 .text의 경우에는 내부적으로 모든 child node에 대해서 텍스트 노드를 찾아서 연결하기 때문에 '100 댄스'라는 결과가 나오게 됩니다.

즉 elem.text는 ''.join(soup.select_one('span.member').find_all(text=True)) 와 같이 동작한다고 생각하시면 되겠습니다.

 

https://github.com/wention/BeautifulSoup4/blob/master/bs4/element.py#L846

comment menu
2020.01.04. 01:39

신고

"humit님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 작성자 → humit
profile image

앗 제가 완전히 잘못 이해하고 있었네요 ㅠㅠ

답변해주셔서 정말 감사합니다!!

.text가 ''.join(soup.select_one('span.member').find_all(text=True))와 같고, .find(text=Ture)는 다른 것이라고 보아야 되는군요~

그럼 humit 님께서도 즐거운 2020년의 첫 토요일 되시길 기원합니다 ^-^

comment menu
2020.01.04. 09:05

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
공지 [작업 완료] 설 명절 맞이 서버 업데이트 안내 3 마스터 24.02.11.17:21 1023
공지 [중요] 호스팅 만료와 관련하여 일부 수칙이 변경됩니다. 4 마스터 23.01.14.02:23 4697
공지 [필독] 질문하는 방법 17 마스터 18.02.23.03:09 4482
86 파이썬에서 유니코드 문자열 처리와 관련하여 질문 드립니다 6 image 이니스프리 19.10.12.21:10 1132
85 VPS와 홈 서버에서 동시접속자 수에 대한 막연한 질문 드려요 ㅠㅠ 14 이니스프리 17.11.13.20:28 1136
Beautifulsoup에서 .find(text=True, recursive=False)과 관련하여 질문 드립니다. 2 이니스프리 20.01.03.23:11 1151
83 베리즈 웹 쉐어 연결 시간 초과 문제 29 image 루니 17.08.07.11:38 1166
82 키보드 트레이가 달린 컴퓨터 책상 추천을 부탁드립니다 2 이니스프리 18.03.18.21:40 1167
81 사설 IP에 도메인 연결하기 11 네모 21.02.28.23:10 1174
80 같은 도메인으로 2개의 서버는 안될까요? 7 title: 도밥위키!Dobob 18.09.17.00:06 1188
79 아이폰8+ 네비 사용시 발열(?) 문제에 대한 해결책을 여쭤봅니다 10 이니스프리 19.01.26.18:25 1193
78 페이지 리로드를 해도 배경음악이 끊김없이 재생되는 방법 3 유넛 17.03.19.13:55 1201
77 [역방향 프록시] 뭐가 문제인지 검토 부탁 드립니다 11 image xnview 18.06.19.23:03 1227
76 [역방향프록시] windows server 2016 - Application Request Routing 2 image xnview 18.05.30.22:51 1235
75 StartupCheckLibrary.dll / winscomrssrv.dll 지정된 모듈을 찾을 수 없습니다. 3 image 갱생협스 20.04.07.11:08 1245
74 네이버 사전을 크롤링할 때 한자의 인코딩 관련 하여 질문 드립니다. (일부 한자만 깨지는 현상) 21 image 이니스프리 19.11.22.16:22 1254
73 혹시 infinityfree무료호스팅 아시는 분 계신가요? 8 워린이 20.07.08.16:03 1268
72 인텔 NUC를 이용한 홈 서버 구성에 대해 질문 드립니다 ^^ 9 이니스프리 19.04.21.08:48 1273
71 [가상화 네트워크] 사설IP 여러곳에서 80포트를 사용하고 싶습니다 18 image xnview 18.06.28.13:48 1279
70 라즈베리 파이로 1인용 서버를 돌릴 수 있을까요? 18 제르엘 18.03.31.12:40 1291
69 IIS에서 한 사이트 내에서 폴더에 각각 도메인 지정 못하나요? 17 title: 황금 서버 (30일)하루살이 17.01.19.13:57 1297
68 구글 웹마스터 사이트맵 가져올 수 없음 문제와 스포터 호스팅 Lua 스크립트 관련 질문 드립니다 12 image Gokoro 19.04.23.23:46 1297
67 도움이 절실합니다. Freenom 질문입니다.(왕초보) 22 image 슬립 17.11.14.12:55 1322