활동스트림 최근 항목 10개 가져오기 - select()

gogori6565·2022년 5월 16일
0

Opensw-Basis-project

목록 보기
4/10

★ 본격적인 웹 크롤링! - BeautifulSoup의 select() 사용

select() 기능

select()
select('태그명')
select('.클래스명')
select('태그명.클래스명')
select('상위태그명.클래스명>하위태그명.클래스명')

  • '>' : 자식태그 표현
  • select() : 리스트로 저장
  • select_one() : 첫 번째 태그만 저장
  • 따라서, select()로 가져왔을 때, 문자열만 추출하고 싶으면 리스트의 인덱스 하나하나 .text로 변경해야함!

활동스트림 최근 항목 10개 가져오기

##~위에 생략 - 로그인 구현 및 사이트 이동 코드~##

#활동스트림 내용 담은 element 가져오기
sleep(5)
response=driver.find_element_by_xpath('//*[@id="body-content"]').get_attribute('innerHTML')

soup = bs(response, 'html.parser')

##최근항목 10개 가져오기##
#수업 코스 이름
#linkToCourse - 수업코스이름 담고있는 a태그의 상위태그 div의 클래스명
cours=soup.select('.js-previousStreamEntries.activity-group.columns.main-column>ul.activity-feed>li>div>div>div>div>div>a') #linkToCourse

#수업 바로 밑 타이틀 내용
#name - 타이틀 내용 담고있는 a태그의 (상위(ng-switch)의)상위태그 div의 클래스명
title=soup.select('.js-previousStreamEntries.activity-group.columns.main-column>ul.activity-feed>li>div>div>div>div>div.name>ng-switch>a') #name

for i in range(0,10,1):
    print(cours[i].text)
print("\n")
for i in range(0,10,1):
    print(title[i].text)

※ 하면서 알게 된 점

  • class의 값이 여러 개일 수 있는데, 이 경우 '.'을 통해 공백을 없애야함
  • 상위, 하위의 순서 체계없이 바로 원하는 자식을 class명을 통해 가져올 수 있다고 생각했는데
    -> 안된다! 원하는 자식 태그를 얻으려면 자식의 자식, 그 자식의 자식으로 하나하나 타고 들어가야한다...
profile
p(´∇`)q

0개의 댓글