출처 : https://domdom.tistory.com/175
[크롤링] 파이썬으로 인스타그램 게시물 크롤링하기 (json)
처음 인스타그램 사이트에 들어가면 로그인창이 나와요. 일단 로그인을 해줍니다! https://www.instagram.com/ 그리고서, 원하는 게시물을 크롤링 하기 위해 게시물을 검색해볼게요. 저는 강아지를 좋
domdom.tistory.com
이분 코드로 진행해보았고 사진파일저장 & 엑셀저장까지 추가적으로 개발했다
빠르게 인스타그램 크롤링 하는방법 시작!!
1. 파이썬 다운로드
다운로드 url : https://www.python.org/downloads/
Download Python
The official home of the Python Programming Language
www.python.org
위 경로에 들어가서 파이썬 다운로드
다운로드할때 나는 D드라이브 경로로 별도지정해서 다운로드했다.
다운로드 끝났으면 CMD 창 (명령프로토콜)에서 확인해야하는데, 시작 바에서 CMD 치면 나온다.
파이썬이 잘 다운로드됐나 확인하기위하여 명령어를 입력해본다.
phtyon --version
파이썬 버전이 출력되면 정상적으로 된것.
2. vscode 다운로드
다운로드 URL: https://code.visualstudio.com/download
나는 윈도우 유저라서 시스템인스톨러 64bit 윈도우 용으로 다운받았다.
3. 인스타그램 로그인
1) 로그인 후 F12 버튼 누름
키보드에서 F12 누르면 관리자 창이 뜨는데 name 쪽을 보면 아직 깨끗하다.
2) 내가 원하는 태그명 검색
태그를 검색하면 주소창이 아래와 같은 형식으로 변경될것이다.
https://www.instagram.com/explore/tags/태그이름/
3) URL 변경
https://www.instagram.com/explore/tags/태그이름/?a=1
기존 url 에서?a=1 를 붙여서 들어가보면 json 파일 형식이 노출될것임.
이때 다시 f12로 들어가보면
?_a=1 이라는 name 이 보이고, 걔를 클릭해보면
Request Header가 존재하는데, 이 창을 유지한 상태로 냅둔다.
3. 필요 라이브러리 다운
1). cmd (명령 프로토콜)창에서 필요한 라이브러리들 다운받는다.
pip install openpyxl
pip install requests
pip install datetime
요거 세개가 필요하다.
세줄 써있다고 한꺼번에 입력하지말고 한줄 입력 후 다운받아지면 그다음줄 입력하면된다.
4. vscode 실행 & 코드작성
1) 원하는 위치에 폴더하나 만들고 vscode를 실행한다. ex) D드라이브에 폴더하나 생성
2) vscode 실행 > 파일 > 폴더열기
1.test 폴더를 연다.
신뢰 안내창나오면 신뢰합니다 체크
문서하나 생성해서 test.py 로 py 파일 생성
정상적으로 생성됐으면 사진 저장할 폴더를 하나 만들어준다.
요 아이콘눌러서 images 라는 이름으로 생성
그리고 test.py에 아래 코드를 복붙. test 말고 다른이름으로 해서 생성해도되지만 꼭 .py가 붙어야된다.
from pprint import pprint
from openpyxl.workbook.workbook import Workbook
import requests
import json
from datetime import datetime
# 헤더값은 각자의 f12의 내용 참고해서 작성해야됨. 아래 코드의 값과 다를 수 있음.
header = {
'accept': '*/*',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7',
'cookie': 'f12에서 찾아서 넣어야됨 쿠키값',
'referer': "f12에서 찾아서 넣어야됨",
'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform':'windows',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',
'x-asbd-id': 'f12에서 찾아서 넣어야됨',
'x-ig-app-id': 'f12에서 찾아서 넣어야됨',
'x-ig-www-claim': 'f12에서 찾아서 넣어야됨',
'x-requested-with': 'XMLHttpRequest'
}
dataList = []
URL = 'https://www.instagram.com/explore/tags/태그명/?__a=1'
# 개수확인용도
pidCount = 0
while(True):
res = requests.get(URL, headers =header)
res = res.json()
if 'next_page' not in res['data']['recent'].keys() or int(res['data']['recent']['next_page']) == 0: break
max_id = res['data']['recent']['next_max_id']
for n in res['data']['recent']['sections']:
for m in ((n['layout_content']['medias'])):
# m : 인스타 게시글 1개
m = m['media']
data = {}
data['pagePk'] = m['code']
data['URL'] = 'https://www.instagram.com/p/'+ data['pagePk']+"/"
data['user_name'] = (m['user']['username'])
# 이미지/동영상 체크
keys = m.keys()
if 'carousel_media' in keys:
data['image'] = (m['carousel_media'])
else:
data['image'] = [{'image_versions2':{"candidates":[{'url':'동영상업로드'}]}}]
dataList.append(data)
pidCount = pidCount+1
pprint (pidCount) # 개수확인용도
URL = 'https://www.instagram.com/explore/tags/'+'태그명'+'/?__a=1&max_id='+max_id
# 엑셀 다운로드 및 이미지 저장
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
#시트생성
sheet1 = wb['Sheet']
sheet1.title = '수집 데이터'
sheet1['A1'] = '아이디'
sheet1['B1'] = 'URL'
sheet1['C1'] = '이미지'
sheetIndex = 2
for data in dataList:
sheet1['A'+str(sheetIndex)] = data['user_name']
sheet1['B'+str(sheetIndex)] = data['URL']
# 이미지링크 엑셀에 저장
for imgUrl in data['image']:
url = imgUrl['image_versions2']['candidates'][0]['url']
sheet1['C'+str(sheetIndex)] = url
# 이미지 폴더에 저장
if not os.path.exists("./images/"+data['user_name']):
os.mkdir("./images/"+data['user_name'])
if url not in '동영상업로드':
r = requests.get(url)
file = open("./images/"+data['user_name']+'/'+data['user_name']+str(sheetIndex)+".jpg","wb")
file.write(r.content)
file.close()
sheetIndex = sheetIndex+1
wb.save('./test1.xlsx')
헤더값은 아까 f12에서 구한 쿠키값..등등 제목보고 알아서 넣고
아까 이미지저장용 폴더를 images 라고 만들었는데, 다른 이름으로 생성하고싶으면 바꿔도된다. 하지만
위 코드에서 ./images 로 써져잇는 부분을 동일하게 꼭 바꿔줘야된다
최종적으로 저장되는 엑셀파일 이름도 wb.save('./test1.xlsx') 라고 되어있는데, 이부분을 원하는 엑셀이름으로 바꿔도됨.
이렇게하면, 1.test 라는 폴더안에 test1.xlsx 이 생성되고 images 폴더안에 사진들이 알아서 저장된다.
'과거 게시글' 카테고리의 다른 글
> invalid source release: 11 프로젝트 빌드 안될 때 (0) | 2021.11.04 |
---|---|
mybatis 데이터 안넘어올때, resultMap 안먹힐 때 (1) | 2021.09.15 |
아무조건없이 로컬에서는 잘 되는데 실서버에서 안될때 (0) | 2021.09.14 |
jsp에서 java로 배열 array 전송 시 에러 java.lang.NumberFormatException: For input string: "" (0) | 2021.07.27 |
response.addCookie 안됨. jquery $.cookie 생성 안됨 undefind (0) | 2021.05.21 |