0

В Firefox можно щелкнуть правой кнопкой мыши по изображению и выбрать «Копировать местоположение изображения». Это позволяет получить абсолютный путь изображения, даже если в атрибуте src изображения предоставляется только относительный путь. Можно ли получить этот абсолютный путь программно? Где он хранится?Как абсолютный путь к изображению на веб-сайте

Я использую Python3, запрашивает доступ к сайту, красивый суп для разбора html.

+0

Что такое страница? –

+0

Возможная публикация http://stackoverflow.com/questions/4139989/what-is-a-simple-way-to-extract-the-list-of-urls-on-a-webpage-using-python/4140102 –

+0

Здесь атрибут src может быть полным URL-адресом, относительным путем к текущей странице, относительным путем к домену или даже перемещением к каталогу родителей, например 'src =" ../ some_folder' и многим другим вариантам, нет никого способ магически получить полный путь с помощью bs4, это не браузер. –

ответ

0

Простое решение

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) 
+1

Ни простое, ни расширенное решение на самом деле не является ответом: простой дает только относительный путь, а расширенный только ** предполагает **, что полный путь - это url + image src, который иногда (в моем случае, например) неверен. – wasd

+0

Я обновил свой ответ, чтобы использовать 'os.path.normpath()' для правильного форматирования относительных путей, которые находятся выше текущего каталога. '' https://example.com/a/b/c.html "и' "../../ img.jpg" 'join join '" https://example.com/a/img .jpg "' –

 Смежные вопросы

  • Нет связанных вопросов^_^