이미지 URL 클릭시 Web으로 창이 뜨지않고 파일로 저장되는 경우

조회수 649회

파이썬 크롤링을 연습하고 있습니다.

원래는 사이트는 올라와 있는 이미지 주소를 얻어오면 인터넷 익스플로러가 열리면서 이미지가 열리는데요, 이를 이용해서 urllib.request 이미지 URL을 원하는 파일명으로 변경한 뒤 다운받아왔습니다.

그런데 어느 사이트는 이미지 URL을 클릭하면 웹에서 열리지 않고 바로 자동으로 다운이 되더라구요...

그 URL을 urllib.request 를 해서 원하는 파일명으로 바꾸고 저장하려고 하면 안됩니다.

URL 클릭하면 자동으로 바로 저장되는데 이것을 web으로 열리게 해서 이미지 이름을 원하는 이름으로 변경 후 저장할 수 있는 방법이 있을까요?

감사합니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 올려주신 주소를 requests를 사용해서 헤더를 불러오니 Content-Type이 아래와 같았습니다.

    'Content-Type': 'application/octet-stream'

    그리고 예를들어 사용하고 계신 프로필 사진의 주소같은 경우는 Content-Type이 'image/jpeg' 입니다.

    https://res.cloudinary.com/eightcruz/image/facebook/c_lfill,h_32,w_32/3277655915597638

    'Content-Type': 'image/jpeg'

    해당 데이터는 MIME 타입이라고 해서 클라이언트에게 제공될 때 어떤 형태로 제공될지를 의미합니다. 브라우저는 MIME 타입을 읽고 어떤 데이터인지를 판단해서 브라우저로 띄워 줄지 아니면 다운로드를 받을지 결정할 수 있습니다.

    'application/octet-stream'는 모든 종류의 이진 데이터를 의미하기 때문에 브라우저에서 열리지 않았습니다.

    헤더 정보는 서버 측에서 정합니다.

    관련 내용은 MIME 타입으로 검색하셔서 더 찾아보시는 것이 좋을 것 같습니다.

    원하는 파일명으로 저장하는건, 아래와 같은 방식으로 하시면 어떨까요? 확장자가 다른 경우는 따로 파싱해서 붙여주시면 될 것 같습니다.

    import requests
    
    req0 = requests.get('https://mall-image.tving.com/media/file/goods/2020/07/50a101706b3e69dec13b9ddb69aa9442.jpg')
    file = open("yes.jpg",mode="wb")
    file.write(req0.content)
    file.close()
    
    # 아래는 헤더 참고용 코드입니다.
    print(req0.headers)
    req1 = requests.get('https://res.cloudinary.com/eightcruz/image/facebook/c_lfill,h_32,w_32/3277655915597638')
    print(req1.headers)
    

    감사합니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)