Я работаю над проектом и пытаюсь извлечь URL-адрес изображений с веб-сайта. Я новичок в этом, поэтому, пожалуйста, потерпите меня. На основе HTML-кода класс изображений, которые мне нужны, - fotorama__img. Однако когда я выполняю свой код, он, похоже, не работает. Кто-нибудь знает, почему это так? Кроме того, почему атрибут src не содержит всего URL-адреса, а только его части? Пример: ссылка на изображение - https://www.supermicro.com/files_SYS/images/System/SYS-120U-TNR_callout_front.jpg, но атрибут src тега img - "/files_SYS/images/System/sysThumb/SYS-120U-TNR_main.png".

Вот мой код:

from bs4 import BeautifulSoup
import requests 

page = requests.get("https://www.supermicro.com/en/products/system/Ultra/1U/SYS-120U-TNR")
soup = BeautifulSoup(page.content,'lxml')
images = soup.find_all("img", {"class": "fotorama__img"})
for image in images:
    print(image.get("src"))

А вот изображение HTML-кода для страницы введите описание изображения здесь

Спасибо за помощь!

1
Jake Nguyen 5 Май 2021 в 02:27

1 ответ

Лучший ответ

Класс добавляется динамически через JavaScript, поэтому beautifulsoup его не видит. Чтобы извлечь изображения с этого сайта, вы можете:

import requests
from bs4 import BeautifulSoup

page = requests.get(
    "https://www.supermicro.com/en/products/system/Ultra/1U/SYS-120U-TNR"
)
soup = BeautifulSoup(page.content, "lxml")
images = [
    "https://www.supermicro.com" + a["href"]
    for a in soup.select(".fotorama > a")
]

print(*images, sep="\n")

Печать:

https://www.supermicro.com/files_SYS/images/System/SYS-120U-TNR_main.png
https://www.supermicro.com/files_SYS/images/System/SYS-120U-TNR_callout_angle.jpg
https://www.supermicro.com/files_SYS/images/System/SYS-120U-TNR_callout_top.jpg
https://www.supermicro.com/files_SYS/images/System/SYS-120U-TNR_callout_front.jpg
https://www.supermicro.com/files_SYS/images/System/SYS-120U-TNR_callout_rear.jpg
1
Andrej Kesely 4 Май 2021 в 23:34