1-1. 인스타그램 크롤링하기

2020. 7. 16. 11:07데이터 분석/파이썬

위의 그림처럼 해시태그 관광을 찾으면 주소가 아래와 같이 나옵니다.

https://www.instagram.com/explore/tags/관광/? hl=ko

 

#관광 해시태그 • Instagram 사진 및 동영상

 

www.instagram.com

따라서 특정 검색어에 따른 주소를 만들기 위해 주소 코드를 만들어 줍니다.

def insta_searching(word):
    url = "https://www.instagram.com/explore/tags/" + word
    return url
import time

그 후, 필요한 패키지를 불러오고 설치되어있는 크롬 드라이버를 연결해 줍니다.

from selenium import webdriver
from bs4 import BeautifulSoup
import time
import re

# 크롬 브라우저 열기
driver = webdriver.Chrome('C:/chromedriver_win32 (1)/chromedriver.exe') 

driver.get('https://www.instargram.com')
time.sleep(2)

인스타그램을 크롤링하기 위해서는 인스타그램 로그인 코드를 만들어 줘야 합니다.

'본인 계정 이메일/아이디' , '비밀번호' 란에는 각자의 계정 정보를 입력해 주시면 정상적으로 로그인됩니다.

email = '본인 계정 이메일/아이디' 
input_id = driver.find_elements_by_css_selector('input._2hvTZ.pexuQ.zyHYP')[0]
input_id.clear()
input_id.send_keys(email)

password = '비밀번호' 
input_pw = driver.find_elements_by_css_selector('input._2hvTZ.pexuQ.zyHYP')[1]
input_pw.clear()
input_pw.send_keys(password)
input_pw.submit()

selenium을 통해 url에 접속하기 위해서 위에서 만들어 놓은 코드를 활용하여 

해당 페이지로 넘어가 정보를 들고 옵니다.

word = "관광"
url = insta_searching(word)
driver.get(url)

time.sleep()을 사용하는 이유로는 정보를 들고 오기까지의 일정 시간을 정해주는 것입니다.

def select_first(driver):
    first = driver.find_element_by_css_selector("div._9AhH0")
    first.click()
    time.sleep(3)
    
select_first(driver)

인스타그램 페이지에서 F12버튼을 눌러 path를 확인하고 본문 내용, 해시태그, 작성일자, 좋아요 수 , 위치 정보를 들고 와서 저장합니다.

import re
from bs4 import BeautifulSoup

def get_content(driver):
    
    html = driver.page_source
    soup = BeautifulSoup(html, 'lxml')
    # 본문 내용 
    try:
        content = soup.select('div.C4VMK > span')[0].text
    except:
        content = ' '
    # 해시태그 
    tags = re.findall(r'#[^\s#,\\]+', content)  
    # 작성일자 
    date = soup.select('time._1o9PC.Nzb55')[0]['datetime'][:10]
    # 좋아요 
    try:
        like = soup.select('div.Nm9Fw > button')[0].text[4:-1]   
    except:
        like = 0
    # 위치
    try: 
        place = soup.select('div.M30cS')[0].text
    except:
        place = ''
   
    data = [content, date, like, place, tags]
    return data

get_content(driver)

한 페이지에서 크롤링하고 다음 페이지로 넘어가는 코드를 작성해 줍니다.

def move_next(driver):

    right = driver.find_element_by_css_selector ('a.coreSpriteRightPaginationArrow')
    right.click()
    time.sleep(3)

move_next(driver)

이제 본격적으로 크롤링을 합니다.

word = "경북여행" 
url = insta_searching(word)

driver.get(url)
time.sleep(3)

select_first(driver)

results = [ ]

target = 500  
for i in range(target):
    
    try:
        data = get_content(driver)  
        results.append(data)
        move_next(driver)
    except:
        time.sleep(2)
        move_next(driver)
    

print(results[:2])

driver.get(url)을 통해 검색 페이지에 접속하고, target = 함수를 활용해 크롤링할 게시글 수를 지정합니다.

크롤링이 완료되었으면 이 결과를 dataframe형식으로 저장합니다.

import pandas as pd

results_df = pd.DataFrame(results)
results_df.columns = ['content','data','like','place','tags']
results_df.to_excel('C:/Users/POASISTOUR/Desktop/경북여행.xlsx')

 

 

 

< 위 글은 "직장인을 위한 데이터 분석 실무"를 참고하였습니다 >

'데이터 분석 > 파이썬' 카테고리의 다른 글

1-4. 시각화  (0) 2020.07.16
1-3. 해시태그 정리하기  (1) 2020.07.16
1-2. 중복데이터 제거 및 파일 합치기  (0) 2020.07.16
1.경상북도 관광 해시태그 분석  (0) 2020.07.16