inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

내 업무를 대신 할 파이썬(Python) 웹크롤링 & 자동화 (feat. 주식, 부동산 데이터 / 인스타그램)

len(ul_element) 관련 질문_추가

221

ilhalm

작성한 질문수 8

0

 

교수님

 

안녕하십니까? 아래 질문에 대해 말씀주신 부분을 다음과 같이 첨부드립니다. 

 

type(ul_element)

bs4.element .Tag

 

print(ul_element)


<ul class="kwd_lst _recent"> <li class="item _item" data-keyword="@in_txt@" data-rank="@rank@" data-template-type="history"> <a class="kwd" href="#"> <span class="fix"><span class="common_ico_kwd"><i class="imsc ico_search"></i></span><span>@txt@</span></span> </a> <span class="etc"> <em class="date">@date@.</em> <a aria-pressed="false" class="bt_item _del" href="#" role="button"><i class="imsc ico_del">삭제</i></a> </span> </li> </ul>



지금 다시 보니까 ul_element도 ul_elements 내의 또 다른 리스트가 아니었나 싶습니다. 즉 13개의 원소로 이루어진 ul_elements의 첫 번째 요소인 ul_element도 3개의 요소로 구성 된 리스트 형태인 건 아닌지요? 그런데 type가 Tag인데 리스트가 될 수 있는지요?

 

감사합니다

 

--------------------------------------------------------------------------------------------

원 질문

 

 

교수님
 
안녕하세요? 강의 너무 잘 듣고 있는 학생입니다. 문의 사항이 한 가지 있습니다.
 
select() 강의에서

------------------------------------------------------------------------------

ul_elements = soup.select("ul")

len(ul_elements)
13
 
-> 13개 원소 중에서 아래 ul_element는 첫 번째 원소만 뽑아냈는데, 왜 len(ul_element)는 1이 아닌 3이 나오는지요? 원소가 1개이기 때문에 1이 되야 하는 것은 아닌지요?
 
ul_element = ul_elements[0]
 
len(ul_element)
3

-------------------------------------------------------------------------------------
 
교수님 답변
 

 

안녕하세요!

제가 보기에도 좀 이상하네요.

혹시 type(ul_element), print(ul_element) 두 명령어 결과 첨부 가능하실까요?

 

 

웹-크롤링 python

답변 1

1

DeepingSauce

안녕하세요.

 

우선 한가지 먼저 말씀드리면, len()는 list type의 객체에만 호출이 되는 함수는 아닙니다.

가령 string 클래스 객체에도 쓸수가 있죠.

왜냐하면 len()함수는 내부적으로 해당 객체의 __len__ 함수를 호출하게 설계되어있습니다.

따라서 어떤 클래스이든 __len__() 함수를 구현했다면, 해당 함수가 반환하는 값을 출력하도록 되어있습니다.

 

bs4의 github에서 Tag 클래스를 자세히들여다보시면, 마찬가지로 __len__()이 구현되어있음을 확인하실 수 있습니다: https://github.com/newvem/beautifulsoup/blob/03b1b76ff969651b1ec4071c0b2e749590461f7d/bs4/element.py#L574

 

여기서 len(self.contents)를 return하는데 여기서 self.contents는 Tag라는 클래스가 상속받은 PageElement라는 부모클래스에서 정의되는 녀석입니다(리스트 타입).

 

이 self.contents는 Tag라는 object내에서 해당 element의 자식 element를 넣어두는 리스트라고 보시면 되겠습니다 (https://github.com/newvem/beautifulsoup/blob/03b1b76ff969651b1ec4071c0b2e749590461f7d/bs4/element.py#L106 참고)

 

라이브러리 코드를 뜯어보고 관찰하시는것이 처음이면 좀 어려우실수도 있는데, 제 답변을 통해 '코드 분석은 이런 방식과 흐름으로 진행하는구나'라는 느낌만 우선 가져가시고, 차근차근 연습하시면, 이후에 비슷한 문제에 부딪혔을 때 큰 도움이 되시리라 생각합니다.

 

좋은질문 감사드립니다.

0

ilhalm

교수님

 

답변 감사드립니다. 말씀대로 천천히 더 공부해보도록 하겠습니다!

15.1 네이버 부동산 사이트 개발자도구 실행시 현상 문의

0

898

1

requirments 설치 시 오류

0

97

1

6.1 미국주식 데이터 크롤링이 막혔네요.

0

227

2

태그를 못찾는 오류 질문드립니다.

0

144

2

6.1 미국 주식 데이터 크롤링을 막아둔 거 같아요.

0

284

2

requirements.txt 다운로드가 안끝나요

0

149

2

주신 파일로 다운로드를 하던 중에 끝에 이런 오류가 뜨는데 어떡해야하나요?

0

151

1

혹시 애플 M시리즈 사용하시는 분 중에 오류

0

152

0

전일비 상승,하락때문에 int화를 못하고 있는데

0

127

1

일별 시세 데이터 상승/하락 \t\n해결법

0

159

1

pd.concat(df, ignore_index=True) InvalidIndexError 해결 방법 문의

0

471

2

pip install -r requirements.txt 문제

0

368

3

부동산 KB 시세 크롤링 문의

0

828

1

7.1 주식 일별 시세 데이터(Yahoo finance)

1

380

1

네이버 부동산 매물 크롤링 오류

0

645

1

네이버 부동산 크롤링 문의드립니다.

0

1059

1

버전 관련 질문

0

353

1

5.2강 주식 일별 시세 데이터 관련 질문이 있습니다

0

281

1

7.1 야후 파이낸스 크롤링 request 오류

0

741

1

anaconda

0

358

1

야후파이낸스 크롤링 오류

0

824

1

셀레니움 변경점

2

791

1

request.get() 하면 SSLCertVerificationError 에러가 납니다.

0

520

1

이론 수업 자료 공유 해주실 수 있나요?

0

362

0