전체 스터디
전체 스터디
  • 전체보기
  • 질문
  • 숙제
내 스터디
  • 스터디에 참여해보세요!
다른 스터디
  • 멀티캠
    • 전체보기
    • 질문
    • 숙제
    • 잡담
  • 파이썬 기초 스터디
  • 네이버 정복 파이썬 크롤링
  • 페이스북 만드는 웹개발
  • 데이터사이언스 12시간 입문기
  • 파이썬 구글 Sheet 연동
  • 엑셀서당 - 훈장님의 기초 엑셀 트레이닝
  • 고전게임을 만들며 배우는 코딩의 기초
  • 내 업무를 거의 자동화하는 방법
  • SQL 입문 4시간
  • QR 코드 프로그래밍
  • 비전공자 개발지식 총정리
  • 초고속 퍼포먼스 마케터
  • 왓챠 함께 만들기
  • 퍼블리셔 초고속 입문기
  • 한국형 커뮤니티 만들기
  • airbnb 프론트엔드 카피 프로젝트
  • 워드프레스로 쿠팡 만들기
신재용 리더
네이버 정복 파이썬 크롤링
온라인
클래스 자세히 보기
천준수
12월 16일 17:00 · 멀티캠

복습하다가 궁금한게 생겨서 질문드립니다.

저희가 raw =  requests.get() 함수로 데이터를 가져와서

raw.text를 출력하면 태그 등이 다 살아있는데

예를 들어, titles = html.select() 함수로 가져온 데이터를

titles[0].text 로 출력하면 titles[0]에서 태그를 지우고 문자만 남겨주는 이유가 뭔가요?

같은 메서드 함수인데 작동하는 원리가 다른 것 같아서.. 데이터 타입에 따라 text 가 다르게 작동하는 것인지 갑자기 궁금해서 질문드립니다.


신재용
12월 16일 17:29
print(type(raw)) # <class 'requests.models.Response'>
print(type(titles[0])) # <class 'bs4.element.Tag'>

raw와 titles[0]는 다른 type을 가지는 객체입니다. raw는 requests의 결과를 담는 객체고, titles[0]는 BeautifulSoup으로 파싱이 완료된 결과를 담는 객체입니다.

서로 다른 type의 객체인데 text라는 같은 이름의 요소를 가지고 있어서 헷갈리신것 같아요.



좋아요 0
    신재용
    12월 16일 17:55

    네네 괄호가 안 붙었으니 함수는 아닙니다. 

    text같은건 프로그래밍 언어마다 부르는 말이 조금씩 다른데요, 파이썬에서는 보통 멤버변수, 속성 정도로 부릅니다. 메서드는 객체 안에 있는 함수고, 멤버변수는 객체 안에 있는 변수입니다.

    raw와 titles[0]에서 .text라는 똑같은 이름의 멤버변수를 사용하는건 그냥 우연입니다.

    requests 라이브러리와 BeautifulSoup4 라이브러리를 만든 사람이 각각 다르죠? 다른 사람이 다른 라이브러리에 각각 text라는 멤버변수를 정의했고, 서로 다른 목적으로 만들어진 라이브러리인만큼 기능이 다른 거라고 이해하시면 됩니다.

    아마 text라는 말 자체가 워낙 흔한 말이기 때문에 파이썬 자체와 연관이 있는거라고 헷갈릴수도 있는데요. 만약에 requests 라이브러리 제작자가 문자열을 담는 멤버변수를 text라는 말 대신에 potato 라는 말을 써서 정의했으면 사용자도 마찬가지로 .potato라는 이름으로 접근해야 합니다.

    좋아요 0
      천준수
      12월 16일 17:44

      아 헷갈렸네요. 함수가 되려면 ()가 뒤에 붙어야하는데 .text는 괄호가 안붙으니 함수는 아닌거죠? 근데 객체 뒤에 붙어서 데이터를 변환해주니까 함수처럼 느껴졌던 것 같습니다. 그러면 .text 같은거는 뭐라고 부르나요..? 사실 raw에 .text가 붙는거랑 titles[0]에 .text가 붙을 때 역할이 달라지는 것 같아서 아직 좀 헷갈리네요 ㅜㅜ 

      좋아요 0
        댓글 1개 더보기
        참여자 네이버 정복 파이썬 크롤링