Instagram 계정의 Follower 크롤링

개요



Instagram 계정의 모든 팔로워 정보를 크롤링합니다.
공식 Instagram API에는 자신의 팔로워 목록을 얻는 API가 있지만 다른 팔로워 목록을 얻는 API는 없습니다.
그래서 이번에는 모든 계정의 팔로워 정보를 크롤링하는 프로그램을 만들었습니다.

전제 조건



이 프로그램을 사용하기위한 전제 조건
1. Instagram 계정이 있습니다.
2. 조사하려는 계정의 User ID를 알고 있습니다.
3. 자신의 Query ID 되는 것을 알고 있다

2와 3에 대한 자세한 내용은 나중에 설명합니다.

프로그램



crawl_followers.py

import requests
import json

# Your Account info
def get_user_info():
    return {
            "username": "your_account",
            "password": "your_password"
            }

# HTTP Headers to login
def login_http_headers():
    ua = "".join(["Mozilla/5.0 (Windows NT 6.1; WOW64) ",
                  "AppleWebKit/537.36 (KHTML, like Gecko) ",
                  "Chrome/56.0.2924.87 Safari/537.36"])
    return {
            "user-agent": ua,
            "referer":"https://www.instagram.com/",
            "x-csrftoken":"null",
            "cookie":"sessionid=null; csrftoken=null"
            }

# login session
def logined_session():
    session = requests.Session()
    login_headers = login_http_headers()
    user_info = get_user_info()
    login_url = "https://www.instagram.com/accounts/login/ajax/"
    session.post(login_url, data=user_info, headers=login_headers)
    return session

# a fetch (max 3000 followers)
def fetch_followers(session, user_id, query_id, after=None):
    variables = {
        "id": user_id,
        "first": 3000,
    }
    if after:
        variables["after"] = after

    followers_url = "".join(["https://www.instagram.com/graphql/query/?",
                             "query_id=" + query_id + "&",
                             "variables=" + json.dumps(variables)])
    # HTTP Request
    followers = session.get(followers_url)
    dic = json.loads(followers.text)
    edge_followed_by = dic["data"]["user"]["edge_followed_by"]

    count = edge_followed_by["count"] # number of followers
    after = edge_followed_by["page_info"]["end_cursor"] # next pagination
    has_next = edge_followed_by["page_info"]["has_next_page"]
    return {
            "count": count,
            "after": after,
            "has_next":  has_next,
            "followers": edge_followed_by["edges"]
            }

def fetch_all_followers(session, user_id, query_id):
    after     = None # pagination
    followers = []  

    while(True):
        fetched_followers = fetch_followers(session, user_id, query_id, after)
        followers += fetched_followers["followers"]

        if fetched_followers["has_next"]:
            after = fetched_followers["after"]
        else:
            return {
                    "count": fetched_followers["count"],
                    "followers": followers
                    }

def main(user_id, query_id):
    session = logined_session()
    return fetch_all_followers(session, user_id, query_id)

if __name__ == '__main__':
    user_id  = "3425874156" # user id to search 
    query_id = "" # your query id
    main(user_id, query_id)

조사하려는 계정의 User ID 알아보기



특정 계정의 사용자 ID를 알기 쉽습니다. 일반적으로 Instagram GUI에서 볼 수 있습니다.
예: taylorswift user id 알아보기
1단계: 크롬 열기
2단계: 개발자 도구 열기
3단계: 네트워크 탭으로 이동
4단계: htps //w w. Ins g et al. 코 m/타 yぉr ぃft/ 방문
5 단계 : ↓에서/query를 클릭하십시오

6단계: Response 탭으로 이동하여 "owner"라는 키를 찾습니다.


7단계: "owner"의 "id"라는 키 옆에 있는 문자열이 User ID입니다.

자신의 query id 알아



1단계: 크롬 열기
2단계: htps //w w. Ins g et al. 코m/ 부터 login
3단계: htps //w w. Ins g et al. 코 m/타 yぉr ぃft/ 방문
4단계: 개발자 도구 열기
5단계: 네트워크 열기
6단계: taylor에서 Followers 클릭
7단계: ↓에 있는 요청의 ?query_id 부분이 자신의 query id입니다(숨겨진 부분에 실제로 있음)


Query ID에 대해 알았습니다.



· 다시 로그인해도 항상 동일
· 계정을 변경하면 다른 것입니다.
· 인스 타 그램의 공식 API에서 이러한 스킬을 얻을 수 없습니다.
· 결론, 정체는 잘 모르겠지만, 계정과 일대일의 관계에있는 뭔가의 ID

이상하다

좋은 웹페이지 즐겨찾기