본문 바로가기
TOP
데이터 스킬업/웹크롤링

[파이썬:웹크롤링] #14 인스타그램 좋아요 수 크롤링(마우스오버/텍스트 추출) with move_to_element()

by 티챠림 2022. 6. 12.

 

[왕초보 웹크롤링 무작정 따라하기] 웹크롤링, 셀레니움, 액션체인, 마우스오버, move_to_element(), 웹 텍스트 추출, text


#14 인스타그램 좋아요 수 크롤링(마우스오버/텍스트 출력) 


액션체인, 마우스 오버하기 (바로가기 Click)

웹데이터 텍스트값 추출하기 (바로가기 Click)


이전에 요소의 경로를 추출하는데 css 선택자를 사용했다면, 이번에는 xpath를 사용하려고 한다. 경로를 추출하는데 뭘 사용해도 상관은 없지만 경우에 따라 조금 더 편리한 것을 사용하면 된다. xpath 경로도 selector와 동일하게 개발자도구의 copy를 통해 복사할 수 있다.

 

css 선택자로 단일 요소 찾는 메소드 .find_element_by_css_selector()
css 선택자로 복수 요소 찾는 메소드 .find_elements_by_css_selector()
xpath로 단일 요소 찾는 메소드 .find_element_by_xpath()
xpath로 복수 요소 찾는 메소드 .find_elements_by_xpath()

 

  액션체인, 마우스 오버하기

좋아요와 댓글 수는 게시물 위에 마우스를 올려야 나타난다. xpath로 최근 게시물의 경로를 지정하고 요소에 마우스를 이동하는 메소드 .move_to_element()를 사용해 준다. 위에서 액션체인을 한 번 사용해 주었기 때문에 오류 방지를 위해 새로 정의해 주자.

#04. 게시물애 마우스 올리기(마우스 오버)
#첫 번째 게시물의 xpath 경로 지정
pead = dr.find_element_by_xpath('//*[@id="mount_0_0_BL"]/div/div[1]/div/div[1]/div/div/div[1]/div[1]/section/main/div/div[5]/article/div[1]/div/div[1]/div[1]')

#게시물로 마우스 옮기기 실행
act = ActionChains(dr)
act.move_to_element(pead).perform()
time.sleep(1) #로딩 시간 기다림

 

 

  텍스트값 추출하기

이제 좋아요와 댓글 수의 각 경로에서 text를 뽑아주면 된다. 경로를 살펴보면 좋아요와 댓글수가 동일한 선택자로 되어 있으니 슬라이싱으로 구분해 주자. 텍스트값은 .text 메소드를 사용하면 추출할 수 있다. 

#05. 좋아요와 댓글 수 크롤링
'''
좋아요수와 댓글수가 동일한 선택자로 구성됨
두 값을 같이 받아온 후, 슬라이싱
'''
likes_commnets = dr.find_elements_by_xpath('//*[@id="mount_0_0_BL"]/div/div[1]/div/div[1]/div/div/div[1]/div[1]/section/main/div/div[5]/article/div[1]/div/div[1]/div[1]/a/div[2]/ul/li/div/span')

#인덱스를 사용해 좋아요수와 댓글수 구분
likes = likes_commnets[0].text
comments = likes_commnets[1].text

print(likes)
print(comments)

 

게시일자는 게시물을 클릭해야 확인 할 수있으니 click메소드를 사용해 게시물을 열고 게시일자를 추출하면 된다. 그런데 게시일자가 '~일 전'으로 나와있다. 하지만 html을 자세히 확인해보면 datetime이라는 요소로 년월일시가 정확히 적혀있는 것을 확인할 수 있다. html 안의 요소는 get_attribute메소드로 추출할 수 있다. 

#06. 게시일자 크롤링

pead.click() #피드 클릭
time.sleep(2) #로딩 대기

#게시일자 선택 후 텍스트 추출
date = dr.find_element_by_xpath('//*[@id="mount_0_0_BL"]/div/div[1]/div/div[2]/div/div/div[1]/div/div[3]/div/div/div/div/div[2]/div/article/div/div[3]/div/div/div[2]/div/div/a/div/time').get_attribute('datetime')

print(date)

 

 


▼다음글 이어보기▼

 

[ep01:웹크롤링] #14 셀레니움 크롤링 반복문(for문 & range) with 파이썬

[왕초보 웹크롤링 무작정 따라하기] 웹크롤링, 셀레니움, for 반복문, range. 업무지옥을 탈출한 건에 대하여(feat.업무자동화) #14 셀레니움 크롤링 반복문(for문 & range) for반복문과 range()활용법 (

charimlab.tistory.com

댓글