파이썬 프로그래밍으로 업무 자동화 할 줄 아는 스마트한 퍼포먼스 마케터 되기 세번째 프로젝트!
이번에는 파이썬 셀레니움으로 인스타그램 댓글을 자동 추출하는, 크롤링, 웹 스크래핑 코드를 작성해보았다.
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. 추출한 인스타그램 댓글 엑셀 파일 예시
- 아래와 같이 인스타그램 댓글이 엑셀 파일에 저장된다.
'마케터의 기록 > 파이썬 공부 중' 카테고리의 다른 글
파이썬으로 인스타그램 이미지 다운로드 하는 법 (2) | 2021.06.13 |
---|---|
파이썬 셀레니움/뷰티풀수프로 유튜브 댓글 크롤링 하기 (3) | 2021.04.18 |
파이썬 셀레니움으로 네이버 연관검색어 크롤링 하기 (6) | 2021.01.22 |