2017-03-09 5 views
1

API에서 이미지를 다운로드하는 Python 스크립트를 작성하려고합니다.
API는이 같은 형식으로 이미지를 반환URL에서 높이와 너비를 무시하면서 Python을 사용하여 이미지를 긁는 방법은 무엇입니까?

https://stackoverflow.com/media/GetImage?ID=98383838&imageName=03833883.jpg&width=640&height=480` 

을 새 줄에 각 이미지. urllib를 사용하려고하지만 640x480보다는 전체 크기 이미지를 원할 때 각 jpg를 처리하는 너비/높이를 무시하는 방법을 알아 내려고 애 쓰고 있습니다.

나는 다음과 같이 테스트를 봤는데 :

import urllib 
import re 

input_file = open('imgurls.txt','r') 
x=0 
for line in input_file: 
    URL= line 

    urllib.urlretrieve(URL, str(x) + ".jpg") 
    x+=1 

나는 너비/높이 문제를 접근하는 방법을 모르겠어요.
나는 rsplit을 사용해야한다고 확신하지만 실제로는 그렇지 않습니다.
오류를 피하기 위해 읽는 줄이 URL이 아닌 경우 다음 줄로 이동해야합니다.

답변

1

URL에서 마지막 두 개의 쿼리 매개 변수를 분리 한 다음 URL을 다시 가입시킬 수 있습니다.

url = 'https://stackoverflow.com/media/GetImage?ID=98383838&imageName=03833883.jpg&width=640&height=480' 
full_img_url = '&'.join(url.split('&')[:-2]) 

# 'https://stackoverflow.com/media/GetImage?ID=98383838&imageName=03833883.jpg' 

이것은 너비와 높이가 항상 마지막이라고 가정합니다.

2

cricket_007 님의 답변이 좋았습니다. 약간 더 강력한 접근 방법은 urlparse을 사용하여 URL을 분할하고 필요없는 검색어 매개 변수를 삭제 한 다음 재구성하는 것입니다.

import urlparse 
url = 'https://stackoverflow.com/media/GetImage?ID=98383838&imageName=03833883.jpg&width=640&height=480' 
parsed = urlparse.urlparse(url) 
query = parsed.query 
parsed_query = urlparse.parse_qs(query) 
parsed_query.pop('width', None) 
parsed_query.pop('height', None) 
result = urlparse.urlunparse((parsed.scheme, parsed.netloc, parsed.path, parsed.params, urllib.urlencode(parsed_query, True), parsed.fragment))