Как очистить изображения с помощью Python, игнорируя их высоту и ширину в URL-адресе?

Я пытаюсь написать скрипт 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, чтобы избежать ошибок.


person Adam W    schedule 09.03.2017    source источник


Ответы (2)


Вы можете отделить последние два параметра запроса от 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'

Это предполагает, что ширина и высота всегда являются последними.

person OneCricketeer    schedule 09.03.2017

Ответ 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))
person Mureinik    schedule 09.03.2017