Как использовать URLLib.request для l oop через URL-адреса и загрузки изображений? - PullRequest
2 голосов
/ 16 июня 2020

Моя текущая программа выглядит так

import os
import urllib.request


baseUrl = "https://website.com/wp-content/upload/xxx/yyy/zzz-%s.jpg"

for i in range(1,48):
    url = baseUrl % i
    urllib.request.urlretrieve(baseUrl, os.path.basename(url))

Я давно не кодировал python, но я написал это, используя urllib2, когда раньше использовал Python2 .7.

Предполагается заменить% s в URL-адресе и l oop через 1-48 и загрузить все изображения в каталог, в котором находится скрипт. Но я получаю много ошибок.

edit: вот выдается ошибка.

Traceback (most recent call last):
  File "download.py", line 9, in <module>
    urllib.request.urlretrieve(url, os.path.basename(url))
  File "C:\Program Files\Python37\lib\urllib\request.py", line 247, in urlretrieve
    with contextlib.closing(urlopen(url, data)) as fp:
  File "C:\Program Files\Python37\lib\urllib\request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Program Files\Python37\lib\urllib\request.py", line 531, in open
    response = meth(req, response)
  File "C:\Program Files\Python37\lib\urllib\request.py", line 641, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Program Files\Python37\lib\urllib\request.py", line 569, in error
    return self._call_chain(*args)
  File "C:\Program Files\Python37\lib\urllib\request.py", line 503, in _call_chain
    result = func(*args)
  File "C:\Program Files\Python37\lib\urllib\request.py", line 649, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden

Ответы [ 3 ]

1 голос
/ 16 июня 2020

urllib.request доступно только на Python 3, поэтому вам нужно запустить код в Python 3.

0 голосов
/ 16 июня 2020

Попробуйте использовать модуль requests:

import requests
baseUrl = "https://website.com/wp-content/upload/xxx/yyy/zzz-%s.jpg"

for i in range(1,48):
    url = baseUrl % i
    response = requests.get(url)
    my_raw_data = response.content
    with open(os.path.basename(url), 'wb') as my_data:
        my_data.write(my_raw_data)
    my_data.close()

Чтобы добавить, вы должны использовать url в запросе, а не baseUrl, как показано в вашем коде:

import os
import urllib.request


baseUrl = "https://website.com/wp-content/upload/xxx/yyy/zzz-%s.jpg"

for i in range(1,48):
    url = baseUrl % i
    #urllib.request.urlretrieve(baseUrl, os.path.basename(url))
    #Use This line :
    urllib.request.urlretrieve(url, os.path.basename(url))

Выполнить это в Python 3

0 голосов
/ 16 июня 2020

Простое исправление, если вы передадите правильную строку:

 urllib.request.urlretrieve(url, os.path.basename(url))

В документации сказано, что urlretrieve является переносом из прежних версий, поэтому вы можете найти другой способ сделать это.

Я нашел этот альтернативный подход, измененный на основе другого ответа SO:

import os
import requests
baseUrl = "https://website.com/wp-content/upload/xxx/yyy/zzz-%s.jpg"
for i in range(1,48):
    url = baseUrl % i
    r = requests.get(url)
    open(os.path.basename(url), 'wb').write(r.content)    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...