관리 메뉴

솜씨좋은장씨

[Python]인스타그램 크롤링을 통해 #흑당버블티 분석해보기! 본문

Programming/Python

[Python]인스타그램 크롤링을 통해 #흑당버블티 분석해보기!

솜씨좋은장씨 2019. 10. 9. 22:35
728x90
반응형

요즘 들어서 대만카스테라, 벌집아이스크림 때처럼 흑당 버블티 가게가 우후 죽순 생겨나고 있습니다.

 

인스타그램 태그를 활용하면 흑당버블티에 대한 동향을 알 수 있을까라는 의문점이 들었고

 

셀레니움을 활용한 인스타그램 크롤링을 통해 흑당버블티에 대한 분석을 해보았습니다.

 

먼저 #흑당버블티 태그가 달려있는 게시물의 개수가 몇 개 인지 확인해보니

 

무려 76,291개나 되었습니다.

 

 

처음 목표는 이 76,291개 전체를 다 크롤링해와서 주마다 게시물 개수의 추이도 보고

 

# 흑당버블티 태그가 달려있는 글 들 속에서 각 회사별로 몇 번씩 언급이 되었는지 확인해보는 것이 목표였습니다.

 

그러나!!!!!

정말 앗, 이런! 하는 오류였습니다.

 

목표인 76,291개를 도달하기 전에 크롬드라이버가 다운이 되어버렸습니다.

 

제 추측으로는 메모리 부족으로 생각됩니다.

 

어디까지 크롤링이 되었는지 확인해보니 5,022개까지 크롤링 해 온 것을 볼 수 있었습니다.

5,022개의 글에서 태그를 크롤링해오면서 각각의 글이 작성된 날짜를 카운팅해보니 아래와 같은 결과가 나타났습니다.

 

원래 생각했던 것보다 너무 짧은 기간이었지만 하루에 1,500건 이상 씩 글이 올라온다는 것을 보니 요즘 인기가 많기는 한 것 같습니다.

 

인스타그램 게시물 수

브랜드 별 언급 횟수

 

5,000개 가량의 글 속에서 흑당버블티 브랜드명은 각각 몇 번씩 등장했는지 확인해보았습니다.

타이거 슈가 > 흑화당 > 공차 > 더앨리 > 이디야 > 쩐주단 > 타이완슈가 > 요거프레소 > 메가커피 > 팔공티 > 투썸플레이스 > 홍루이젠 >  카페그램 > 호이차 > 커피빈 > GS25 > 빽다방 > 더벤티 > 베스킨라빈스 > 놀숲 > 카페베네

순으로 많이 언급 된 것으로 보였습니다.

 

흑당버블티와 함께 태그된 단어들로 만든 워드 클라우드

 

크롤링에 사용한 코드

import requests
from bs4 import BeautifulSoup
from selenium import webdriver as wd
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import re

keyword = "흑당버블티"

url = "https://www.instagram.com/explore/tags/{}/".format(keyword)

instagram_tags = []
instagram_tag_dates = []

driver = wd.Chrome("./chromedriver")
driver.get(url)
time.sleep(3)

driver.find_element_by_css_selector('div.v1Nh3.kIKUG._bz0w').click()
for i in range(76086):
    time.sleep(1)
    try:
        data = driver.find_element_by_css_selector('.C7I1f.X7jCj') # C7I1f X7jCj
        tag_raw = data.text
        tags = re.findall('#[A-Za-z0-9가-힣]+', tag_raw) 
        tag = ''.join(tags).replace("#"," ") # "#" 제거

        tag_data = tag.split()

        for tag_one in tag_data:
            instagram_tags.append(tag_one)
    #       print(instagram_tags)
        
        date = driver.find_element_by_css_selector("time.FH9sR.Nzb55" ).text     # 날짜 선택

        if date.find('시간') != -1 or date.find('일') != -1 or date.find('분') != -1:
            instagram_tag_dates.append('0주')
        else:
            instagram_tag_dates.append(date)
        #print(instagram_tag_dates)
    except:
        instagram_tags.append("error")
        instagram_tag_dates.append('error')
    try:
        WebDriverWait(driver, 100).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'a.HBoOv.coreSpriteRightPaginationArrow')))
        driver.find_element_by_css_selector('a.HBoOv.coreSpriteRightPaginationArrow').click()
    except:
        driver.close()
    #     date = datum2.text
    #print(date)

    time.sleep(3)
driver.close()

 

5,022개의 게시물을 크롤링하는데 5시간 정도 걸렸던 것 같습니다.

 

학생, 직장인, 지역별로도 확인하고 싶었으나

 

워드클라우드를 만들다가... 커널이 재실행되는 바람에....

 

저장을 하지 않은 불찰로 인하여 데이터는 모두 사라졌습니다.

 

앞으로 크롤링을 하거나 뭔가 큰 데이터를 처리하고 나서는 DB건 csv건 저장을 미리미리 해야겠다는 교훈을 얻었습니다.

 

크롤링에 사용한 코드는 아래의 링크를 참조해주세요.

 

SOMJANG/Instagram_Crawler

인스타그램 크롤러 (Python, Selenium). Contribute to SOMJANG/Instagram_Crawler development by creating an account on GitHub.

github.com

 

Comments