РЕДАКТИРОВАТЬ: Для контекста, так как исходный вопрос был обновлен кем-то еще и изменил исходный код, исходный шаблон, который использовал пользователь, был r'/([\w_-]+.)$'
.Это была оригинальная проблема.Этот контекст позволит сделать следующий ответ более понятным:
Я использовал шаблон, подобный r'/([\w_.-]+)$'
.Шаблон, который вы использовали, не позволял пути содержать .
, за исключением последнего символа, потому что .
вне []
означает любой символ, и вы имели его прямо перед $
(конец строки).Поэтому я переместил .
в []
, что означает, что в группу символов можно включить литерал .
.Это позволило шаблону захватывать имена файлов изображений в конце URL.
import re
import requests
from bs4 import BeautifulSoup
site = 'http://pixabay.com'
response = requests.get(site)
soup = BeautifulSoup(response.text, 'html.parser')
img_tags = soup.find_all('img')
urls = [img['src'] for img in img_tags]
for url in urls:
filename = re.search(r'/([\w_.-]+)$', url)
with open(filename.group(1), 'wb') as f:
if 'http' not in url:
# sometimes an image source can be relative
# if it is provide the base url which also happens
# to be the site variable atm.
url = '{}{}'.format(site, url)
response = requests.get(url)
f.write(response.content)