파이썬 크롤링은 requests.get으로 데이터를 가져오는 것만 있는지 알았습니다.
공부를 하다보니, get방식이 아닌 post (requests.post)를 이용하여, 이미지를 업로드를
할수 있다는걸 알게 되어 정리해 놓습니다.
기록은 기억보다 강할테니까요
1. text도 아니고, 이미지를 어떻게 업로드하지?
코딩 초보라면 이미지를 전송한다는 개념을 이해할수 없다. 내가 초보라 몰랐으니 말이다, 알고나면 별거 아니지만, 알기전에는 죽었다 깨어나도 모를것 같다.
공부를 하면서 알게 된것은
이미지도 결국은 컴퓨터 언어 0,1 로 전송된다는것, 그렇다고 이미지를 0, 1로 보내는 코드를 만들진 않는다. 아래 코드를 살펴보자
f = open("img.jpg", "rb")
img = f.read()
f.close()
이미지를 open하고 – open(“img.jpg) : img.jpg는 나의이미지 파일 이름이다.
평소에는 오픈을 “r”모드로 하는이 이미지를 전송하기 위해서는 “rb”모드로 오픈하면된다.
그리고 데이터를 img 라는 변수에 담아 놓았다
2. requests.post로 이미지 전송하기
크롤링 할때, request.get(“url주소”) 이런식으로 크롤링을 했다, 여기서는 데이터를 가져오는게 아니라 , 이미지를 전송하는 것이기 때문에 (post가 데이터를 입력 할때 쓰인다는것을 알고 있기를 바란다. get도 가능하지만.. )
일단 코드를 보자 그래야 이해가 빠르니까
url = "https://api.imgur.com/3/image?client_id=54jsdfjl6c2fdjslkf5afdjfdksf59c58ad7"
res = requests.post(url, files={
"image": img,
"type": "file",
"name": "tt.jpg"
})
print(res.status_code)
실제 이미지를 등록할수 있는 https://imgur.com/ 사이트 api 주소다. (client_id 를 다르게 적어놔서 똑같이 따라한다고 바로 등록되진 않는다. (imgur.com에 이미지를 등록하는 방법은 많이 나와있으니 구글링 해보시길..)
이제 주의 깊게 보길 바란다 몇가지 유의 사항이 있다.
- 이미지를 전송하기 위해선 requests.get 이 아닌, request.post를 사용해야 한다
- 옵션으로 files 를 사용하고, 파일의 안의 데를 3가지를 보내야 하는데, “image”, “type”, “name” 정보를 보내줘야한다
- “image” : 어떤 내용의 이미지를 보낼것인지 위에서 img 변수를 정의 해줬던걸 기억하자.
- “type” : 이미지 파일이니까 file 을 적어주면된다.
- “name” : 원하는 이름을 적으면된다.
- 이미지가 잘 전송 됐는지 status코드를 출력해 보았다 print(res.status_code)
3. 요약
최종코드를 먼저 보자.
import requests
f = open("img.jpg", "rb")
img = f.read()
f.close()
url = "https://api.imgur.com/3/image?client_id=546c25a59c58ad7"
# 이미지 전송
res = requests.post(url, files={
"image": img,
"type": "file",
"name": "tt.jpg"
})
print(res.status_code)
간단한 코드다 다만 개념을 모르면 계속 모르고 코딩을 했을듯 하다
오늘 배운 개념을 다시한번 정리 해보면
- 이미지를 전솔할때 rb 모드로 이미지 파일을 오픈 해서, 변수에 담아놓기
- requests.post로 이미지를 등록 할수 있다 ( url이 이미를 등록할수 있는 url이어야 한다)
- request.post의 이자 값으로 files 옵션을 주고 필요한 값들을 같이 전송해줘야함
- 그래야 mutilpart/form-data로 이미지가 전송됨