마케터의 기록/파이썬 공부 중

파이썬 셀레니움으로 인스타그램 댓글 크롤링 하기

기록하는 마케터 2021. 6. 5. 22:53
반응형

파이썬 프로그래밍으로 업무 자동화 할 줄 아는 스마트한 퍼포먼스 마케터 되기 세번째 프로젝트!

 

이번에는 파이썬 셀레니움으로 인스타그램 댓글을 자동 추출하는, 크롤링, 웹 스크래핑 코드를 작성해보았다. 

 

1. 사용한 라이브러리 목록

- 인스타그램 댓글 크롤링을 하기 위해 셀레니움을 사용했다. 

- 크롤링 한 댓글을 엑셀 파일에 저장하기 위해서 openpyxl과 pandas를 사용했다. 

from selenium import webdriver
import time
from openpyxl import Workbook
import pandas as pd
from selenium.webdriver.common.keys import Keys

 

2. 엑셀 시트 생성 및 인스타그램 사이트 띄우기

- 추출한 댓글을 저장해둘 엑셀 시트를 하나 생성해둔다

- 인스타그램 사이트를 띄워준다.

wb = Workbook(write_only=True)
ws = wb.create_sheet()

driver = webdriver.Chrome()
driver.get("https://www.instagram.com/")
driver.implicitly_wait(3)

 

3. 인스타그램 로그인 및 팝업 종료하기

- Insta ID와 Insta Password에 본인의 인스타그램 아이디 및 패스워드를 기입하여 인스타그램에 로그인 해준다.

- 첫 로그인 시 노출되는 팝업을 종료한다.

# 로그인
driver.find_element_by_css_selector("#loginForm > div > div:nth-child(1) > div > label > input").send_keys("Insta ID")
driver.find_element_by_css_selector("#loginForm > div > div:nth-child(2) > div > label > input").send_keys("Insta Password")
driver.find_element_by_css_selector("#loginForm > div > div:nth-child(3) > button > div").click()
time.sleep(1)

# 팝업 종료
driver.find_element_by_css_selector("#react-root > section > main > div > div > div > div > button").click()
driver.find_element_by_css_selector("body > div.RnEpo.Yx5HN > div > div > div > div.mt3GC > button.aOOlW.HoLwm").click()
time.sleep(1)

 

4. 댓글 추출할 인스타그램 포스팅 접근하기

- ID에 댓글 추출할 인스타그램 계정 아이디를 기입한다.

- 추출할 게시물이 해당 계정에서 몇 번째 포스팅인지 확인 후, 해당 숫자를 N에 기입한다. 

- 예를 들어 내가 댓글 추출할 인스타그램 포스팅이 A라는 계정의 첫번째 게시물이라면 ID에는 A를 기입하고, N에는 0을 기입하면 된다. 

- 내가 댓글 추출한 인스타그램 포스팅이 B라는 계정의 다섯번째 게시물이라면 ID에는 B를 기입하고, N에는 4를 기입하면 된다. 

# 계정 접근
insta_name = driver.find_element_by_css_selector("#react-root > section > nav > div._8MQSO.Cx7Bp > div > div > div.LWmhU._0aCwM > input")
insta_name.send_keys('ID')
time.sleep(2)

insta_name.send_keys(Keys.ENTER)
insta_name.send_keys(Keys.ENTER)
time.sleep(2)

# 첫번째 게시물 클릭
driver.find_elements_by_css_selector('._9AhH0')[N].click()
time.sleep(1)

 

5. 댓글 및 대댓글 모두 노출하기

- 인스타그램 포스팅에 등록된 모든 댓글을 노출되게 만들기 위해 댓글 더보기 버튼을 모두 클릭해준다.

- 대댓글까지 모두 크롤링 하기 위해 답글 보기 영역까지 모두 클릭해 준다.

# 댓글 플러스 버튼 누르기
while True:
    try:
        button = driver.find_element_by_css_selector('body > div._2dDPU.CkGkG > div.zZYga > div > article > div.eo2As > div.EtaWk > ul > li > div > button > span')
    except:
        pass

    if button is not None:
        try:
            driver.find_element_by_css_selector('body > div._2dDPU.CkGkG > div.zZYga > div > article > div.eo2As > div.EtaWk > ul > li > div > button > span').click()
        except:
            break

# 대댓글 버튼 누르기
buttons = driver.find_elements_by_css_selector('li > ul > li > div > button')

for button in buttons:
    button.send_keys(Keys.ENTER)

 

6. 인스타그램 댓글 가져오기

- 인스타그램 포스팅에 댓글을 작성한 사람의 아이디와, 작성한 댓글 내용 2가지를 각각 id_f와 rp_f에 저장한다.

- 추출한 정보 2가지를 result.xlsx 엑셀 파일에 저정한다.

# 댓글 내용 추출
id_f = []
rp_f = []

ids  = driver.find_elements_by_css_selector('div.C4VMK > h3 > div > span > a')
replies = driver.find_elements_by_css_selector('div.C7I1f > div.C4VMK > span')

for id, reply in zip(ids, replies):
    id_a = id.text.strip()
    id_f.append(id_a)

    rp_a = reply.text.strip()
    rp_f.append(rp_a)


    data = {"아이디": id_f,
            "코멘트": rp_f}

df = pd.DataFrame(data)
df.to_excel('result.xlsx')

driver.quit()

 

7. 추출한 인스타그램 댓글 엑셀 파일 예시

- 아래와 같이 인스타그램 댓글이 엑셀 파일에 저장된다.

반응형