도와주세요

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

이니스프리2020.01.03 23:11조회 수 29댓글 2

    • 글자 크기

안녕하세요?


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년의 첫 불금 되세요 ^-^


항상 감사드립니다!


ཇོ་མོ་གླང་མ

    • 글자 크기
해상도는 다르지만 동일한 이미지인지 체크하는 방법이 있을까요? (by 이니스프리) [Selenium] 특정 XPath에서 parent 노드의 iframe을 알아낼 수 있을까요? (by 이니스프리)
  • 2020.1.4 01:39

    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

  • @humit
    이니스프리글쓴이
    2020.1.4 09:05

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

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

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

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

댓글 달기

번호 제목 글쓴이 날짜 조회 수
공지 [중요] sfuh.tk 기본 제공 도메인 사용하는 분들 확인해주시기 바랍니다.5 마스터 2019.12.29 240
공지 회원 전용 페이지가 생겼습니다.16 마스터 2018.03.20 11929
공지 [필독] 질문하는 방법7 마스터 2018.02.23 1653
668 VPS에서의 Selenium 사용과 관련하여 질문 드립니다.1 이니스프리 13시간 전 18
667 '링 피트 어드벤처'가 정말 운동이 되는가요??4 이니스프리 2020.01.11 34
666 우분투만 사용하다가 페도라 13 / Centos 6.9 시험에 응시하려면 적응하기 어려울까요? ㅠㅠ8 이니스프리 2020.01.08 59
665 파이썬 에디터로 어떤 것이 좋나요?14 맛스타 2020.01.08 101
664 이미지 외부링크가 엑박으로 나온다면 어느 부분을 우선적으로 검토해야 될까요? 이니스프리 2020.01.05 28
663 해상도는 다르지만 동일한 이미지인지 체크하는 방법이 있을까요?2 이니스프리 2020.01.05 27
Beautifulsoup에서 .find(text=True, recursive=False)과 관련하여 질문 드립니다.2 이니스프리 2020.01.03 29
661 [Selenium] 특정 XPath에서 parent 노드의 iframe을 알아낼 수 있을까요?2 이니스프리 2020.01.02 39
660 [파이썬] 윈도우에서 pip install로 모듈 설치시에 문제가 발생하는 것과 관련하여 질문 드립니다2 이니스프리 2019.12.29 35
659 여러 개의 반복작업을 켜고 끄는 버튼을 비동기적으로 구현해보려고 하는데요 ㅠㅠ2 이니스프리 2019.12.27 56
658 유튜브 채널 주소 잘아시는분있나요?2 슬기 2019.12.27 40
657 Requests나 Selenium에서 어떤 XHR 전송이 있었는지 확인할 수 있는 방법이 있을까요?3 이니스프리 2019.12.26 38
656 카고야 VPS에서 메일이 왔는데 일본어 관련해서 질문 드립니다.5 이니스프리 2019.12.26 60
655 [파이썬] 결과를 print 문으로 출력하는 것과 파일로 출력하는 것과 결과가 왜 다른가요?8 이니스프리 2019.12.25 39
654 음성번역기 앱 중에 켜놓으면 계속 번역을 해주는 앱이 있을까요? 이니스프리 2019.12.25 27
653 https://imgnbvip.com/ 라는 이미지 호스팅 사이트가 있나요? 이니스프리 2019.12.24 27
652 Google Developer Console의 API 라이브러리 무료 이용에 대해 질문 드립니다.5 이니스프리 2019.12.23 47
651 부산 맛집 추천 부탁드려요~!3 이니스프리 2019.12.20 50
650 [Requests] multipart/form-data의 전송에 대해 질문 드립니다 ^^4 이니스프리 2019.12.18 58
649 프로그래머스 코딩테스트 연습에서 효율성 심사를 통과하려면 어떻게 해야할까요?2 이니스프리 2019.12.18 41
이전 1 2 3 4 5 6 7 8 9 10... 34다음
첨부 (0)
서버에 요청 중입니다. 잠시만 기다려 주십시오...