티스토리 뷰
온라인에 있는 자료들를 파이썬으로 크롤링하면 복잡한 코드 없이도 자동으로 쉽게 다운받을 수 있다.
파이썬을 잘 다루지 못하더라도 인터넷에 능력자들이 미리 만들어놓은 라이브러리를 활용하여 유튜브를 보고 쉽게 따라할 수 있다. 심지어 코드를 전혀 이해를 못하더라도 활용하는데 무리가 없다.
하지만 인스타그램은 이미지를 로드하는 방식이 자바스크립트로 동적으로 진행되기 때문에 구글이나 네이버의 이미지 다운로드 방식과 다소 달라 조금 복잡했다. 유튜브를 보고 블로그들을 참고했지만 원하는 기능(대다수 인터넷에 있는 코드들이 처음 화면에 뜨는 33개 까지만 다운받을 수 있음)이 구현되지 않아 약간 수정해봤다.
코드가 다소 비효율적으로 작성되어있더라도 혹시나 도움이 될까하여 공유드린다.
참고한 유튜브와 블로그는 아래와 같다.
※ 프로그래머 김플 스튜디오
https://www.youtube.com/watch?v=j_BW5vNrcxA&t=1051s
※ 쭈쌤과 호쌤의 연구실
https://blog.itpaper.co.kr/python-selenium-insta/
최종 코드는 아래와 같다.
from urllib.request import urlopen
from urllib.parse import quote_plus
from bs4 import BeautifulSoup
from selenium import webdriver
import time
import requests
import shutil
baseUrl = 'https://www.instagram.com/explore/tags/'
plusUrl = input('검색할 태그를 입력하세요 : ')
url = baseUrl + quote_plus(plusUrl)
driver = webdriver.Chrome()
driver.get(url)
time.sleep(3)
html = driver.page_source
soup = BeautifulSoup(html)
imglist = []
for i in range(0, 5):
insta = soup.select('.v1Nh3.kIKUG._bz0w')
for i in insta:
print('https://www.instagram.com'+ i.a['href'])
imgUrl = i.select_one('.KL4Bh').img['src']
imglist.append(imgUrl)
imglist = list(set(imglist))
html = driver.page_source
soup = BeautifulSoup(html)
insta = soup.select('.v1Nh3.kIKUG._bz0w')
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)
n=0
for i in range(0, 60):
# This is the image url.
image_url = imglist[n]
# Open the url image, set stream to True, this will return the stream content.
resp = requests.get(image_url, stream=True)
# Open a local file with wb ( write binary ) permission.
local_file = open('./img/' + plusUrl + str(n) + '.jpg', 'wb')
# Set decode_content value to True, otherwise the downloaded image file's size will be zero.
resp.raw.decode_content = True
# Copy the response stream raw data to local image file.
shutil.copyfileobj(resp.raw, local_file)
# Remove the image url response object.
n +=1
del resp
driver.close()
# print(imgUrl)
# print(imglist)
지금은 60개로 설정했는데 더욱 늘리고 싶다면 반복횟수를 바꾸고 이미지저장 횟수를 늘리면 된다.
1) for i in range(0, 5): 이 코드에서 5는 스크롤 내리는 반복횟수라 변경하면 됨
2) for i in range(0, 60): 이 코드에서 60은 읽어온 이미지를 저장하는 행위를 반복하는 횟수라 변경하면 됨
이 코드를 실행하려면 위에 참고했던 유튜브에 자세히 설명되어 있지만
1) Import되는 라이브러리들을 설치되어 있어야 한다.
2) chromedriver를 구글에서 다운받아 파이썬파일이 저장된 폴더에 넣어 놓아야 한다.
(내 경우 버전오류가 났었는데 사용하고 있는 chrome버전과 일치되는 chrome driver버전을 다운받아야 오류가 나지 않는다)
https://sites.google.com/a/chromium.org/chromedriver/downloads
3) 결과물은 img폴더에 저장되므로 만들어놓자
결과물
33개가 넘어도 잘 저장되는 것을 볼 수 있다.
파이썬 문외한이라 오래 걸려서 완성했는데 도움이 되었으면 좋겠다.
'7. 코딩 일지' 카테고리의 다른 글
리액트(React)를 배우기 시작하며 (0) | 2020.08.26 |
---|---|
CSS로 밑줄 두껍게 넣는 가장 간단한 방법 (1) | 2020.08.17 |
티스토리, 네이버, 워드프레스, 홈페이지, 어플 장단점 총 정리 (0) | 2020.05.24 |
자바스크립트 - 입력값을 나타내어 주는 코드 addEventListener사용 (0) | 2020.03.24 |
NODE.JS에서 사용하는 PM2 명령어 (0) | 2020.03.20 |
자바스크립트(JAVASCRIPT) 조건문 스스로만든 예제 (0) | 2020.03.18 |
자바스크립트(JAVASCRIPT) 함수부분 연습하기 (0) | 2020.03.18 |
문과생을 위한 코딩 배우는 순서 추천 (0) | 2020.03.18 |
- Total
- Today
- Yesterday