DEV Community

ukkoon
ukkoon

Posted on

인스타그램 스크래핑 (python)

개요

서비스를 개발하며 인스타그램의 유저, 포스트, 스토리 등 다양한 데이터가 필요한 순간이 있다. 이 글은 python의 instaloader 패키지를 중심으로, 인스타그램 스크래핑에 대한 기본적인 내용을 다룬다.

준비

  1. instaloader 패키지 설치
    pip install instaloader

  2. 인스타그램 계정 생성
    이미 계정이 있다고 하더라도 스크래핑용 계정을 별도로 생성하길 추천한다. 인스타그램에 지속적인 request를 보낼 경우 계정이 제재당할 수도 있기 때문이다.

사용

스크래핑 대상 유저명으로 프로필을 불러오고, 해당 프로필의 포스트들을 불러온 후, 각 포스트의 날짜를 출력하고 있다. 포스트의 타입은 Post이다. 확인 후 필요한 필드와 메소드를 사용하면 된다.

from instaloader import Instaloader, Profile

L = Instaloader()
L.login(YOUR_USERNAME, YOUR_PASSWORD)

profile = Profile.from_username(L.context, TARGET_USERNAME)

posts = profile.get_posts()

for post in posts:
    print(post.date)
Enter fullscreen mode Exit fullscreen mode
# 출력 예시
2022-01-14 09:00:53
2022-01-13 09:01:19
2022-01-13 09:01:15
Enter fullscreen mode Exit fullscreen mode

만약 포스트의 컨텐츠(글, 사진, 동영상, 메타데이터)를 파일의 형태로 다운로드 받고싶다면 다음과 같이 작업하면 된다.

from instaloader import Instaloader, Profile

L = Instaloader()
L.login(YOUR_USERNAME, YOUR_PASSWORD)

posts = Profile.from_username(L.context, TARGET_USERNAME).get_posts()

for post in posts:
    L.download_post(post, TARGET_USERNAME)
Enter fullscreen mode Exit fullscreen mode
# TARGET_USERNAME 라는 이름의 폴더에 컨텐츠들이 다운로드된다.

TARGET_USERNAME/2022-01-03_04-38-55_UTC_1.jpg
TARGET_USERNAME/2022-01-03_04-38-55_UTC.json.xz
TARGET_USERNAME/2022-01-03_04-38-55_UTC.txt
Enter fullscreen mode Exit fullscreen mode

심화적으로, 여러 타겟 계정들이 2022년에 작성한 모든 컨텐츠를 다운로드하는 스크래퍼를 만들어본다. time 모듈의 sleep 메서드 등을 적절히 사용해서 과도한 request로 인한 계정 제재를 방지하자.

from datetime import datetime
from itertools import dropwhile, takewhile
from random import randint
from instaloader import Instaloader, Profile
from time import sleep

L = Instaloader()
L.login(YOUR_USERNAME, YOUR_PASSWORD)

TARGETS = [
    TARGET_USERNAME_1,
    TARGET_USERNAME_2,
    TARGET_USERNAME_3,
    TARGET_USERNAME_4,
    TARGET_USERNAME_5
]

FROM = datetime(2022, 1, 1)
TO = datetime(2022, 12, 31)

for target in TARGETS:
    posts = Profile.from_username(L.context,target).get_posts()

    for post in takewhile(lambda p: p.date > FROM, dropwhile(lambda p: p.date > TO, posts)):
        sleep(randint(3, 20))
        L.download_post(post, target)
Enter fullscreen mode Exit fullscreen mode

결론

python의 instaloader 패키지를 이용해 아주 간단하게 스크래핑을 수행할 수 있다. request 요청 정도에 따라 계정 제재뿐 아니라 ip밴도 당할 수 있다고 본 것 같은데, 이메일 생성 봇과, vpn을 함께 사용하면 초강력 스크래퍼를 만들 수 있을 것 같다.

이 글에서는 최소한의 사용 방법을 살펴보았는데, 이 패키지에는 해시태그나 인기도를 기반으로 포스트를 스크래핑하는 등 다양하고 유용한 기능이 많이 있다. 또한 module 중심으로 살펴보았지만, cli도 잘 갖춰져 있으니 필요시 잘 활용하길 바란다.

Top comments (0)