[Python] 티스토리에서 이미지 원본 한번에 받기

 

안녕하세요?

 

티스토리 블로그에서 사진을 다운 받을 일이 있을 때, 마우스 우클릭을 이용하여 페이지를 통째로 저장하게 되면, 사진은 원본으로 저장되는 것이 아니라 화면에 뜨는 축소된 파일로 저장이 됩니다. 원본을 받으려면 일일이 사진을 클릭하여 원본을 다운받아야 합니다.

 

이번에는 파이썬을 이용하여 티스토리 게시물에 있는 이미지를 원본 사이즈로 일괄 다운받는 작업을 구현해보겠습니다.

 

     

     

    1. 준비물

    1) 크롬드라이버 

    없으면 다운로드하여 코드와 같은 경로에 둡니다.

    다운 받는 법 게시물 : https://kminito.tistory.com/78

     

    Chromedriver 다운로드 및 설치하는 법

    웹드라이버는 프로그래밍 언어를 이용하여 웹브라우저를 직접적으로 조작할 수 있도록 해 주는 툴입니다. 여기서는 Chrome의 Webdriver인 Chromedriver를 다운 받는 법을 알아봅니다. 1. Chrome 설치하기 (

    kminito.tistory.com

     

    2) Selenium

    없으면 설치해 주세요. 브라우저를 조작하는데 필요합니다.

    pip install selenium

     

     

    2) 다운받을 티스토리 게시물 주소

    사진을 받을 티스토리 게시물 주소입니다. 저는 제 블로그의 게시물을 이용하겠습니다.

    https://kminito.tistory.com/90

     

    아이유 화보 고화질 사진 4장

    티스토리 사진 다운로드 테스트용 게시물입니다. 1. 원본크기 3.32MB, 기본 가운데 정렬  -> 그냥 다운시 1.12MB 2. 원본크기 1.41MB, 기본 가운데 정렬  -> 그냥 다운시 1.37MB 3. 원본크기 1.89MB, 정렬 본..

    kminito.tistory.com

     

    2. 아이디어

    Ctrl+Shift+C를 눌러서 티스토리 블로그 게시물의 이미지를 눌러보시면, 아래와 같이 class가 'imageblock'인 figure 태그에 이미지가 들어가게 되고, 원본 이미지 주소는 그 아래 span 태그의 data-url에 들어가게 됩니다.

     

     

    따라서 게시물의에 있는 각 imageblock의 하위 span 태그의 data-url 주소를 찾고, 그 주소를 다운로드하면 되겠습니다.

     

    참고로 그 아래의 img 태그의 src에 있는 주소의 경우, 블로그에 따라서 원본이 아닌 축소된 사진의 주소가 있는 경우가 있어 위의 data-url 주소를 이용합니다.

     

    3. 전체 코드

    밑에서 한줄씩 설명하겠습니다.

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    import urllib.request
    
    driver = webdriver.Chrome("chromedriver")
    driver.get('https://kminito.tistory.com/90') # 게시물 주소
    driver.implicitly_wait(15)
    
    imageblocks = driver.find_elements(By.CLASS_NAME , 'imageblock')
    
    for i in range(len(imageblocks)):
        image_span = imageblocks[i].find_element(By.TAG_NAME , 'span')
        urllib.request.urlretrieve(image_span.get_attribute("data-url"), f"{i}.png") # 사진 다운로드

     

    실행결과

    > 게시물에 업로드 한 원본 사진 그대로 다운로드

     

    4. 코드 설명

     

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    import urllib.request

    필요한 라이브러리를 import 합니다.

    selenium은 웹브라우저를 조작하기 위한 것이고, urllib.request는 사진을 다운로드 하기 위함입니다.

     

    driver = webdriver.Chrome("chromedriver")
    driver.get('https://kminito.tistory.com/90')
    driver.implicitly_wait(15)

    크롬을 열고, 블로그에 접속합니다. implicitly_wait(15)는 웹페이지가 로드될 때 까지 최대 15초까지는 기다리겠다는 뜻입니다. 만약 페이지 로드에 더 많은 시간이 걸린다면 알맞게 수정하면 됩니다.

     

     

    imageblocks = driver.find_elements(By.CLASS_NAME , 'imageblock')

    블로그 내에서 class name이 'imageblock'인 요소를 모두 찾습니다. find_elements 메서드는 리스트를 반환합니다.

     

    for i in range(len(imageblocks)):
        image_span = imageblocks[i].find_element(By.TAG_NAME , 'span')
        urllib.request.urlretrieve(image_span.get_attribute("data-url"), f"{i}.png")

    위에서 찾은 리스트의 각 아이템에서, span 태그가 있는 요소를 찾습니다.

    첫번째로 나오는 span 태그가 필요한 것이므로 'find_element'를 이용하여 찾습니다.

     

    찾은 요소에서 'data-url' 이 다운받을 이미지 파일의 주소가 되므로, 'get_attribute("data-url")'메서드를 이용하여 주소를 찾습니다. 그리고 'urllib.request.urlretrieve()'를 이용하여 사진을 다운로드 합니다.

     

    다운로드하여 저장할 사진 주소는 "번호.png"의 형식이 됩니다.

     

     

     

    5. 끝 

    기능만 간단히 구현하였습니다. 추가 궁금한 사항이나 잘못된 내용이 있으면 댓글을 남겨주세요.

    감사합니다.

    댓글

    Designed by JB FACTORY