• 목록
  • 아래로
  • 위로



안녕하세요?


날씨가 쌀쌀해졌는데 다들 건강히 계시는지요? ^^


이번 강좌에서는 BeautifulSoup에서 상대적으로 덜 사용되지만 유용한 두 메서드를 다뤄보고자 합니다.



BeautifulSoup을 사용하다보면 자식태그를 제외하고 부모태그의 텍스트만을 추출해야 되는 경우가 있습니다.


예시로서 MLBPark의 게시판 소스를 조금 변형하여 설명하겠습니다.


아래와 같은 HTML 소스가 있을 때 '[3]'을 제외하고 '2010년대 선발진 완봉 top 7 '만을 출력하려면 어떻게 해야될까요??

(단, 정규표현식을 사용하거나, 문자열 자체를 조작하는 방법은 고려하지 않습니다.)


<a href="http://mlbpark.donga.com/b.php?id=1150039147314">2010년대 선발진 완봉 top 7 <span class="replycnt">[3]</span></a>



단순히 select_one('a').text를 한다면 '2010년대 선발진 완봉 top 7 [3]'이란 결과를 리턴하게 됩니다.


물론 .split(' [')[0]을 고려할 수도 있겠지만, 이러한 방법은 글 작성자가 제목에 대괄호를 사용하는 경우에 원하지 않는 엉뚱한 결과를 초래할 수 있습니다 ㄷㄷ


따라서 부모태그만을 추출할 수 있는 방법을 택해야 합니다.


이를 달성하기 위한 여러 방법이 있겠지만, 가장 직관적인 방법은 자식태그를 제거하는 것입니다.


이 때 사용하는 메서드가 바로 .decompose()입니다.


.decompose() 메서드에 대해서는 공식문서에 다음과 같이 설명되어 있습니다.


"Tag.decompose() removes a tag from the tree, then completely destroys it and its contents."


따라서 select_one('a').span.decompose().text를 하면 '2010년대 선발진 완봉 top 7 '을 얻어낼 수 있습니다.



한편 이와 유사한 메서드로 .extract()가 있습니다.


공식문서에 따르면 다음과 같은 역할을 합니다.


"PageElement.extract() removes a tag or string from the tree. It returns the tag or string that was extracted"


.decompose()는 None을 리턴하는 반면, .extract()는 제거된 태그를 리턴합니다.


.extract()는 제거된 태그를 리턴한다는 점에서 리스트에서의 .pop()과 유사한 방식으로 작동한다고 생각하시면 됩니다.



읽으시는 분이 거의 안 계시겠지만 제 허접한 강좌를 읽어주시는 분들께 항상 감사드립니다!


항상 느끼는 것이지만 크롤링의 길은 멀고도 험한 것 같네요 ^^


그럼 스포어 회원님들께서도 굿밤 되시고 감기 조심하세요~!


알피쥐님 포함 3명이 추천

추천인 3

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

Make StudyForUs Great Again!

 

CSVpuymXAAAVVpd.jpg

댓글 10

말카
허접하지 않습니다. 감사할 뿐입니다.
comment menu
2020.02.23. 09:06

신고

"말카님의 댓글"

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

이니스프리 작성자 → 말카
profile image
그렇게 말씀해주셔서 감사합니다 ^^
말카 님께서도 즐거운 주말 되세요~!
comment menu
2020.02.23. 18:14

신고

"이니스프리님의 댓글"

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

GsusWeb
이건 파이썬 코드인가요?
1도 모르지만, 아름다운 비누 이야기는 들어본 것 같아서요.
comment menu
2020.06.19. 18:15

신고

"GsusWeb님의 댓글"

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

이니스프리 작성자 → GsusWeb
profile image
옙 파이썬의 BeautifulSoup 모듈에 대한 설명이 맞아요! ^-^

특별한 사정이 없으면 이 강좌에서는 파이썬을 다루고 있거든요~
comment menu
2020.06.19. 19:29

신고

"이니스프리님의 댓글"

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

GsusWeb → 이니스프리
강의를 하실 정도라니 대단하시네요.
저도 언젠간 파이썬의 필요성을 깨닫게 되면 이니스프리님의 강좌를 보게 될 날이 오겠죠?ㅎ
comment menu
2020.06.19. 20:28

신고

"GsusWeb님의 댓글"

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

이니스프리 작성자 → GsusWeb
profile image
허걱~ 강좌는 마스터 님께 신청만 하면 누구나 할 수 있어요 ㄷㄷ

저같이 실력도 없고 개발자도 아닌 사람도 강좌를 하니깐요~! ^^

제 강좌보다는 다른 회원분들의 훌륭한 강좌를 보시길 바랍니다 :)
comment menu
2020.06.19. 22:28

신고

"이니스프리님의 댓글"

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

GsusWeb → 이니스프리
+1
정말 코딩 1도 모르던 제가 코딩하겠다고 30일째 씨름중인 거 보면,
참 많은 분들의 도움 덕분이라는 생각이 듭니다.
이니스프리님도 그 중 한 분이고요.^^
comment menu
2020.06.19. 22:40

신고

"GsusWeb님의 댓글"

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

이니스프리 작성자 → GsusWeb
profile image
+1
앗 실은 저도 코딩을 시작한지 그리 오래되지 않았어요~! ^^
전공도 코딩과는 전혀 관련이 없구요 ㄷㄷ
저보다 금방 잘 하실거에요!
화이팅이에요 :)
comment menu
2020.06.19. 22:44

신고

"이니스프리님의 댓글"

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

GsusWeb → 이니스프리
같이 해요.^^
comment menu
2020.06.19. 22:54

신고

"GsusWeb님의 댓글"

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

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

존재하지 않는 스티커입니다.

comment menu
2020.06.19. 22:44

신고

"이니스프리님의 댓글"

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

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
29 [디지털포렌식전문가] 제21회 필기시험 합격 후기 9 image 이니스프리 이니스프리 23.10.29.16:11 3078
28 [Python] GIF 파일에 프로그레스바 삽입하기! (Adding progress bar into GIF) image 이니스프리 이니스프리 22.05.14.13:14 12993
27 [Python] 그누보드 자동 글 작성 + 멀티 파일 업로드 스크립트 1 image 이니스프리 이니스프리 21.05.16.09:32 23889
26 0. 행의 분리 및 결합 / 멀티라인 문자열 image 이니스프리 이니스프리 21.04.18.11:53 607
25 [Selenium] proxy를 사용하지 않고 개발자도구에서 Network 탭의 로그를 얻기 image 이니스프리 이니스프리 21.03.06.23:35 1812
24 [번외편 - 한컴한글] 스마트한 문서 작성을 위한 팁 (작성 중) 이니스프리 이니스프리 20.08.08.13:50 581
23 [Requests-HTML] Requests와 비교할 때의 장점! (네이버 뉴스 등 크롤링) 8 image 이니스프리 이니스프리 20.05.14.19:08 1667
22 22. [OpenPyXL] 엑셀 문서 저장하기 / 시트 추가하기 / 셀에 입력하기 14 image 이니스프리 이니스프리 20.02.02.00:46 5738
21 21. [OpenPyXL] 엑셀 문서를 열고 시트에서 셀의 값을 얻기 3 image 이니스프리 이니스프리 20.02.01.23:46 1506
[BeautifulSoup] 자식태그를 제거하기 - .decompose() & .extract() 10 image 이니스프리 이니스프리 20.01.16.00:07 9449
19 [python-telegram-bot] 4096자 글자수 제한을 우회하는 방법 image 이니스프리 이니스프리 20.01.12.11:25 2334
18 [Requests] Selenium을 이용한 Cloudflare의 우회 8 image 이니스프리 이니스프리 20.01.08.19:51 6566
17 9. [정리] 파이써닉한 파이썬 문법 팁 for COS Pro image 이니스프리 이니스프리 20.01.04.23:47 1147
16 [번외편] 네이버 동영상에서 자막을 파일로 추출하는 방법 2 image 이니스프리 이니스프리 19.12.25.22:34 5933
15 4. 문자열 처리 (2) - 문자열 조작에 대한 기본함수 및 메서드 1 image 이니스프리 이니스프리 19.12.12.02:27 749
14 6. 리스트와 관련된 기본함수 및 메서드 7 image 이니스프리 이니스프리 19.12.10.21:16 2215
13 3. 문자열 처리 (1) - 문자열 접근 및 검색방법 4 image 이니스프리 이니스프리 19.12.09.20:00 1359
12 [Selenium] Requests의 session을 Selenium으로 보내기 image 이니스프리 이니스프리 19.12.07.14:17 4910
11 1. 반복문 (1) - while 문 7 image 이니스프리 이니스프리 19.12.06.20:50 2658
10 (序) Python 강좌를 시작하며... 2 image 이니스프리 이니스프리 19.12.05.21:55 636