활동스트림 크롤링 - (1) 제공예정/오늘/최근항목

gogori6565·2022년 5월 20일
0

Opensw-Basis-project

목록 보기
5/10

활동스트림에서 코스이름, 타이틀 내용 -> 제공예정/오늘/최근항목 으로 구분해서 가져오기 수행

제공예정/오늘/최근항목의 cours&title 가져오기

[ 변수 ]

  • upc - 제공예정
    • upc_cours : 제공예정 코스 이름
    • upc_title : 제공예정 타이틀 내용
  • td - 오늘
    • td_cours : 오늘 코스 이름
    • td_title : 오늘 타이틀 내용
  • pre - 최근항목
    • pre_cours : 최근항목 코스 이름
    • pre_title : 최근항목 타이틀 내용

[ 구분해주는 div-class명 ]

  • 제공예정 : js-upcomingStreamEntries activity-group columns main-column
  • 오늘 : js-todayStreamEntries activity-group columns main-column
  • 최근항목 : js-previousStreamEntries activity-group columns main-column

[ cours, title 나타내는 class ]

  • cours : div[class="context ellipsis"]
  • title : a[class="js-title-link"]
#●처음~soup = bs(response, 'html.parser')까지 코드 생략●#

##cours & title 크롤링##
##제공예정##
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')

#문자열만 추출 - len() : 리스트 크기
for i in range(0,len(upc_cours)):
    upc_cours[i]=upc_cours[i].text
    upc_title[i]=upc_title[i].text
for i in range(0,len(td_cours)):
    td_cours[i]=td_cours[i].text
    td_title[i]=td_title[i].text
for i in range(0,len(pre_cours)):
    pre_cours[i]=pre_cours[i].text
    pre_title[i]=pre_title[i].text

#select()는 리스트로 담음
for i in range(len(upc_cours)):
    print(upc_cours[i])
    print(upc_title[i])
print("\n")
for i in range(len(td_cours)):
    print(td_cours[i])
    print(td_title[i])
print("\n")
for i in range(10): #최근활동은 10개만 가져올 것임
    print(pre_cours[i])
    print(pre_title[i])

제공예정/오늘/최근항목 구분하는 이유
제출해야될 과제는 '제공예정'과 '오늘' 항목에만 떠서 우리는 과제 마감기한을 알림으로 알려줄 예정이기 때문에 다른 [과제]카테고리 내용과 구분할 필요가 있음 이 구분을 쉽게 하기 위해 제공예정/오늘/최근항목 파트를 나눈 것이고,
최근항목에서 최소 10개는 불러와야한다고 판단한 바, 구분을 통해 개수를 확실시하기 위함이다.

자 근데, '오늘'에는 마감 과제 스트림 뿐만 아니라 오늘 제공된 스트림들도 뜨기 때문에 '오늘'에서 '마감과제'를 따로 불러와야할 필요가 있음

  • '제공예정'에 뜨는 마감과제 스트림은 근 '5일 이내' 과제만 뜸

생각해보니 구분할 이유가 없어서 그냥 전체 스트림을 가져오는 방법을 썼다가, 이후에 이상하게 스트림 내용을 너무 적게 불러오는 것 같아서 그냥 다시 사용하기로 했다. 문제는, 여전히 왜 스트림 내용을 가져오는 게 변동적이고 더 적은 건지 의문이라는 것이다.
-> 지금 추측으로는 동적사이트라 페이지 로딩에 따라 달라진다? 고 추정 중..

profile
p(´∇`)q

0개의 댓글