Urlretrieve дава име на local_file от променлива

Имам наистина дразнещ проблем.

Използвам Python, за да отворя URL връзка, която е pdf файл и искам да го запазя в моята локална папка.

Моят код:

urlPath = 'http://example.com/test.pdf'
myFile = urlopen(urlPath)
urllib.urlretrieve(myFile.url, myFile.url)

Съобщение за грешка:

tfp = open(filename, 'wb')
IOError: [Errno 22] invalid mode ('wb') or filename: 

Опитах да използвам кода по-долу и всичко работи добре, файлът ми се съхранява правилно.

urlPath = 'http://example.com/test.pdf'
myFile = urlopen(urlPath)
urllib.urlretrieve(myFile.url, 'myFile.pdf')

Какво грешно пиша?


person Panos Angelopoulos    schedule 23.10.2015    source източник
comment


Отговори (1)


Трябва ви само име на файл за втория аргумент на urlretrieve, а не целия URL. Можете да направите:

filename = myFile.url.rsplit('/', 1)

or

filename = os.path.split(myFile.url)[1]

и след това се обадете

urllib.urlretrieve(myFile.url, filename)
person miles82    schedule 23.10.2015
comment
(1) може да се провали, ако URL адресът има част от заявката като /path/test.pdf?version=1.2 (2) Има лоша поддръжка за имена в unicode, напр., записва u'δοκιμή.pdf' като '%CE%B4%CE%BF%CE%BA%CE%B9%CE%BC%CE%AE.pdf' (3) Може да се опита да избяга от текущата папка (ако unquote() се използва небрежно ): '..%5Ctest.pdf'. url2filename() коригира тези и други проблеми - person jfs; 23.10.2015