PyQt + Instagram crawling

김재영·2021년 7월 10일
0

pyside6

목록 보기
1/1

<작성중인 게시물입니다.>

인스타그램 크롤링 어플리케이션을 만들어 보았습니다.

gui 는 qt 를 이용하엿고 python 언어로 크롤링 알고리즘을 구현하였습니다.

작업은 다음과 같은 순서로 진행하였습니다.

1. 필요한 데이터 정의하기

인스타 그램에서 해시태그 검색시 가져올수 있는 데이터 목록은 아래를 통해서 확인한다.

$pip install requests
#python3.9
import requests
import json
hashtag = "닭가슴살요리"
initial_url = f"https://www.instagram.com/explore/tags/{hashtag}/?__a=1"
response = requests.get(url=initial_url)
print(json.loads(response.text))

이렇게 실행하면 로그인이 안되있어서 데이터를 받아 올 수 없음

로그인 기능 구현해서 해당 세션으로 url 요청 해주어야 함

import datetime
import requests
_session = requests.Session()
username = "<isntagram_username>" 	#인스타그램 아이디 입력
password = "<instagram_password>"	#인스타그램 비밀번호 입력

link = "https://www.instagram.com/accounts/login/"
login_url = "https://www.instagram.com/accounts/login/ajax/"

time = int(datetime.now().timestamp())

getCSRF = _session.get(link)
cookieString = str(getCSRF.cookies)
LoginCSRFtoken = cookieString[37:69]

payload = {
            'username': username,
            'enc_password': f'#PWD_INSTAGRAM_BROWSER:0:{time}:{password}',
            'queryParams': {},
            'optIntoOneTap': 'false'
        }

login_header = {
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36",
            "X-Requested-With": "XMLHttpRequest",
            "Referer": "https://www.instagram.com/accounts/login/",
            "x-csrftoken": LoginCSRFtoken
        }
response = _session.post(login_url,data=payload,headers=login_header)

해당 세션으로 다시 요청해보면 아래와 같이 데이터가 나옴
데이터를 가져왔으면 실제 우리가 사용할 데이터 위치와 필드는 아래와 같다.

  • 필요데이터가 잇는 위치(인기 게시물 기준, 섹션)
    response["data"]["top"]["sections"]["layout_content"]["medias"]
  • 필요한 필드:
    ["media"]["caption"]["user"] -> 유저정보(username,pk)
    ? -> 유저 팔로우 수(user 정보 얻는 api 필요)
    ? -> 유저 팔로워 수(user 정보 얻는 api 필요)
    ["media"]["caption"]["created_at"] -> 게시글 작성일자
    ["media"]["caption"]["text"] -> 게시글 본문 내용
    ["media"]["comments"] -> 게시글 댓글 내용

2. UI 설계

3. Qtdesinger 를 이용하여 UI 구현

4. 크롤링 알고리즘 개발

5. QT 와 알고리즘 연동

2개의 댓글

comment-user-thumbnail
2021년 12월 9일

형님 ~ 안녕하세요 !
저는 계속 아래와 같은 애러가 발생하는데

raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

세션으로 로그인이 안되어서 그런건가요??..

1개의 답글