РЕДАКТИРОВАТЬ: Для контекста, поскольку исходный вопрос был обновлен кем-то другим и изменил исходный код, исходный шаблон, который использовал пользователь, был 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. [110]. Это была оригинальная проблема. Этот контекст позволит сделать следующий ответ более понятным:Я использовал шаблон, подобный
[110]. Шаблон, который вы использовали, не позволял пути содержатьr'/([\w_.-]+). Шаблон, который вы использовали, не позволял пути содержать
.
, кроме как в качестве последнего символа, потому что.
за пределами[]
означает любой символ, и вы имели его прямо перед$
(конец строки ). Поэтому я переместил.
в[]
, что означает, что в группе персонажей можно использовать литерал.
. Это позволило шаблону захватывать имена файлов изображений в конце URL..
, кроме как в качестве последнего символа, потому что.
за пределами[]
означает любой символ, и вы имели его прямо перед$
(конец строки ). Поэтому я переместил.
в[]
, что означает, что в группе персонажей можно использовать литерал.
. Это позволило шаблону захватывать имена файлов изображений в конце URL. [110], 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)
.
, кроме как в качестве последнего символа, потому что .
за пределами []
означает любой символ, и вы имели его прямо перед $
(конец строки ). Поэтому я переместил .
в []
, что означает, что в группе персонажей можно использовать литерал .
. Это позволило шаблону захватывать имена файлов изображений в конце URL. [110]. Это была оригинальная проблема. Этот контекст позволит сделать следующий ответ более понятным: Я использовал шаблон, подобный r'/([\w_.-]+). Шаблон, который вы использовали, не позволял пути содержать
.
, кроме как в качестве последнего символа, потому что .
за пределами []
означает любой символ, и вы имели его прямо перед $
(конец строки ). Поэтому я переместил .
в []
, что означает, что в группе персонажей можно использовать литерал .
. Это позволило шаблону захватывать имена файлов изображений в конце URL.
.
, кроме как в качестве последнего символа, потому что .
за пределами []
означает любой символ, и вы имели его прямо перед $
(конец строки ). Поэтому я переместил .
в []
, что означает, что в группе персонажей можно использовать литерал .
. Это позволило шаблону захватывать имена файлов изображений в конце URL. [110] Итак ... мы знаем, что у нас есть фрагментированная куча. Следующий вопрос: что вызывает фрагментацию? Что удерживает эти бесплатные объекты от выпуска? Я прочитал рекомендации: проверять объекты сразу после освобождения свободного места:
! Dumpheap -stat
Дамп таблицы методов бесплатного объекта:! Dumpheap -mt 000db8e8
Выберите один свободный объект из списка для более внимательного изучения:! dumpobj 0x2003b0b0
Запишите размер объекта
Выгрузите следующий объект после него:! dumpobj 0x2003b0b0 + 1000
Найдите объект, содержащий ссылку! gcroot 0x2003b0b0 + 1000
Дамп gchandle найденного объекта.
Обычно я оказываюсь в этой кроличьей норе, и мои ограниченные знания .NET API здесь не подходят. Это правильный способ отладки проблемы?
Джефф