Python: загрузка изображений URL. URL-адрес содержит букву с диакритическими знаками. Я получаю ошибку - PullRequest
4 голосов
/ 29 мая 2020

Проблема заключается в том, что URL-адреса в файле .csv содержат буквы с диакритическими знаками (á, é, í, и т. Д. c.). Если в нем есть диакритический знак, я получаю сообщение об ошибке.

import pandas as pd
import urllib.request


def url_to_jpg(i, url, file_path):

    filename = 'image-{}.jpg'.format(i)
    full_path = '{}{}'.format(file_path, filename)
    urllib.request.urlretrieve(url, full_path)

    print('{} saved.'.format(filename))

    return None

FILENAME = 'imgs_urls.csv'
FILE_PATH = 'images/'

urls = pd.read_csv(FILENAME, encoding ='latin1')


for i, url in enumerate(urls.values):
    url_to_jpg(i, url[0], FILE_PATH)

Изображение ошибки:

Picture of the error

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 29 мая 2020

Вы не можете использовать URL-адреса с символами, отличными от ASCII, вам необходимо очистить / преобразовать их перед этим.

В вашем случае вы должны добавить функцию clean_url ниже в свой l oop. Это работало с вашей ссылкой в ​​python 3:

  1. urllib.parse.urlsplit разбивает URL-адрес на компоненты
  2. urllib.parse.quote будет правильно экранировать символы Unicode
  3. urllib.parse.urlunsplit соединит их вместе

.

import urllib.request
import urllib.parse

def url_to_jpg(url, file_path):
    urllib.request.urlretrieve(url, file_path)
    print('{} saved.'.format(file_path))

def clean_url(url): 
    url = urllib.parse.urlsplit(url)
    url = list(url)
    url[2] = urllib.parse.quote(url[2])
    url = urllib.parse.urlunsplit(url)
    return url

url = u'<url_with_non_ascii_char>'

url = clean_url(url)
url_to_jpg(url, "test.jpg")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...