Простое решение
from bs4 import BeautifulSoup
from requests import get
url = 'https://example.com/'
response = get(url)
soup = BeautifulSoup(response.content, 'html.parser')
# converting to a set will prevent duplicates
images = set([img['src'] for img in soup.find_all('img') if hasattr(img, 'src')])
for img in images:
print(img)
Extended Solution
В случае изображений с использованием относительного пути (или внешнего хоста, CDN, и т.д.), мы можем отсеять большинство с ниже код.
Примечание: Это не будет работать при использовании локальных URIs (file:///temp/web/img1.png
)
Этот код использует validators
пакет, поэтому установить с pip install validators
from bs4 import BeautifulSoup
from requests import get
from os.path import join, normpath
import validators
url = 'https://example.com/'
response = get(url)
soup = BeautifulSoup(response.content, 'html.parser')
images = set([img['src'] for img in soup.find_all('img') if hasattr(img, 'src')])
list_of_img_paths = []
for img in images:
if not validators.url(url): # If NOT a valid URL
# Here we can assume we are dealing with a relative path
formatted_url = normpath(join(url, img)) # format a valid url
list_of_img_paths.append(formatted_url) # add to list
else:
list_of_img_paths.append(img)
Что такое страница? –
Возможная публикация http://stackoverflow.com/questions/4139989/what-is-a-simple-way-to-extract-the-list-of-urls-on-a-webpage-using-python/4140102 –
Здесь атрибут src может быть полным URL-адресом, относительным путем к текущей странице, относительным путем к домену или даже перемещением к каталогу родителей, например 'src =" ../ some_folder' и многим другим вариантам, нет никого способ магически получить полный путь с помощью bs4, это не браузер. –