활동스트림 크롤링 - (3) icon 카테고리

gogori6565·2022년 5월 20일
0

Opensw-Basis-project

목록 보기
7/10

과제/공지사항/성적/강의자료 카테고리 분류하기 - 속성값 이용

카테고리 구분

■ 카테고리 : 공지 사항, 성적, 과제, [ 프레젠테이션, 텍스트 문서, pdf ] = '강의자료'

[ 변수 ]

  • category : 카테고리
  • category_index : 속성값 추출할 때 사용할 category의 index
##전역변수 선언##
category_index=0 #속성값 추출할 때 사용할 category의 index

#●처음~soup = bs(response, 'html.parser')까지 코드 생략●#

##제공예정##
upc_cours=soup.select('.js-upcomingStreamEntries.activity-group.columns.main-column>ul.activity-feed>li>div>div>div>div>div>a')
upc_title=soup.select('.js-upcomingStreamEntries.activity-group.columns.main-column>ul.activity-feed>li>div>div>div>div>div.name>ng-switch>a')

##오늘##
td_cours=soup.select('.js-todayStreamEntries.activity-group.columns.main-column>ul.activity-feed>li>div>div>div>div>div>a')
td_title=soup.select('.js-todayStreamEntries.activity-group.columns.main-column>ul.activity-feed>li>div>div>div>div>div.name>ng-switch>a')

##최근항목##
pre_cours=soup.select('.js-previousStreamEntries.activity-group.columns.main-column>ul.activity-feed>li>div>div>div>div>div>a')
pre_title=soup.select('.js-previousStreamEntries.activity-group.columns.main-column>ul.activity-feed>li>div>div>div>div>div.name>ng-switch>a')

##카테고리 구분##
category=soup.select('svg[class="MuiSvgIconroot-0-2-37 makeStylesdirectionalIcon-0-2-36 makeStylesstrokeIcon-0-2-35 MuiSvgIconcolorPrimary-0-2-38 MuiSvgIconfontSizeLarge-0-2-45"]')

#aria-label의 속성값만 추출
for icon in category:
    category[category_index]=icon['aria-label']
    category_index+=1

print('<제공예정>')
for i in range(0,len(upc_cours)):
    print(category[i])
print('\n<오늘>')
for i in range(len(upc_cours),len(upc_cours)+len(td_cours)):
    print(category[i])
print('\n<최근항목>')
for i in range(len(upc_cours)+len(td_cours),len(upc_cours)+len(td_cours)+10):
    print(category[i])

★ 카테고리 구분을 위해 각 스트림 내용 왼쪽의 icon을 활용할 것임!

  • icon만을 가져오는 클래스 : svg[class="MuiSvgIconroot-0-2-37 makeStylesdirectionalIcon-0-2-36 makeStylesstrokeIcon-0-2-35 MuiSvgIconcolorPrimary-0-2-38 MuiSvgIconfontSizeLarge-0-2-45"]

  • 위의 태그와 클래스를 통해 icon에 해당하는 html 내용 다 가져오고 카테고리 내용만 추출하면 위에서부터 저장됨!

  • 따라서, 제공예정/오늘/최근항목을 담은 리스트의 크기(len)를 구해서 인덱스로 매칭해주면 카테고리 구분 가능!

    여기서 문제! icon에서는 태그 안에 문자열이 따로 없어서 구분할 내용을 text로 불러올 수가 없었음.
    `
    대신, svg[class="MuiSvgIcon ~"] 안에 aria-label이라는 속성에 속성값으로 카테고리 분류가 가능했다! (다행이다)

따라서, 태그 내의 속성값을 가져올 수 있는 방법이 필요했다.

태그 내의 속성값 불러오기

category=soup.select('svg[class="MuiSvgIconroot-0-2-37 makeStylesdirectionalIcon-0-2-36 makeStylesstrokeIcon-0-2-35 MuiSvgIconcolorPrimary-0-2-38 MuiSvgIconfontSizeLarge-0-2-45"]')

#aria-label의 속성값만 추출
for icon in category:
    category[category_index]=icon['aria-label']
    category_index+=1
  • category에 svg[class="MuiSvgIcon ~"]에 해당하는 모든 내용을 가져오고,
  • 이를 반복문으로 돌려서 icon에 하나씩 저장한다.
  • icon['aria-label'] : icon에 담긴 내용에서 속성이 'aria-label'인 속성값을 불러올 수 있다!
  • 가져온 aria-label의 속성값을 다시 category에 하나씩 저장해주면 aria-label의 속성값인 '과제, 공지사항 등'의 내용을 가진 리스트(category)를 만들 수 있다.
profile
p(´∇`)q

0개의 댓글