Я пытаюсь написать скрипт Python для загрузки изображений из API.
API возвращает изображения в следующем формате:
https://stackoverflow.com/media/GetImage?ID=98383838&imageName=03833883.jpg&width=640&height=480`
с каждым изображением на новой строке. Я пытаюсь использовать urllib, но изо всех сил пытаюсь понять, как игнорировать ширину/высоту при обработке каждого jpg, так как мне нужны полноразмерные изображения, а не 640x480.
Я тестировал следующее:
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 · рейтинг 1 · OneCricketeer
Вы можете отделить последние два параметра запроса от 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 · рейтинг 2 · Mureinik
Ответ 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))