Как парсить картинки с сайта gifer.com?
Мне нужно спарсить картинку а точнее gif и скачать ее, а если так нельзя то спарсить ее url или путь к ней, код:
<div class="media-container1"><div class="media-container2"><picture>
<source srcset="https://i.gifer.com/origin/d0/d0fc7bdc9a240be0950efb47f3c90f81_w200.webp" type="image/webp">
<source srcset="https://i.gifer.com/origin/d0/d0fc7bdc9a240be0950efb47f3c90f81_w200.gif" type="image/gif">
<img alt="Загрузка гифка - Загрузка GIF" class="preview-media preview-media_loaded" src="https://i.gifer.com/origin/d0/d0fc7bdc9a240be0950efb47f3c90f81_w200.gif" role="presentation">
</picture></div>
</div>
мой парсер:
import requests
from bs4 import BeautifulSoup as bs
r = requests.get("https://gifer.com/ru/gifs/loading")
soup = bs(r.content, 'lxml')
img = soup.find('picture', class_='preview-media preview-media_loaded')
print(img)
Ответы (2 шт):
Для вашего примера:
import requests
from bs4 import BeautifulSoup
html = '<div class="media-container1"><div class="media-container2"><picture><source srcset="https://i.gifer.com/origin/d0/d0fc7bdc9a240be0950efb47f3c90f81_w200.webp" type="image/webp"><source srcset="https://i.gifer.com/origin/d0/d0fc7bdc9a240be0950efb47f3c90f81_w200.gif" type="image/gif"><img alt="Загрузка гифка - Загрузка GIF" class="preview-media preview-media_loaded" src="https://i.gifer.com/origin/d0/d0fc7bdc9a240be0950efb47f3c90f81_w200.gif" role="presentation"></picture></div></div>'
soup = BeautifulSoup(html, 'html.parser')
img = soup.find('img', class_='preview-media')
img_url = img['src']
даст в img_url адрес гифки: https://i.gifer.com/origin/d0/d0fc7bdc9a240be0950efb47f3c90f81_w200.gif
У вас не работал код, т.к. при загрузке страницы там нет нужных вам тегов, а те теги подгружаются динамически при выполнении javascript.
У BeautifulSoup нет скриптового движка, поэтому он не будет выполнять код на странице. Вам нужно использовать ту библиотеку, у которой будет поддержка javascript, например selenium.
Тут я накидал простенький пример, но хочу заметить, что вам скорее всего придется его дописывать, т.к. гифки на том сайте тоже динамически подгружаются при скролле страницы. В моем примере есть один скролл вниз, чтобы показать как это выглядит, а делать полную прогрузку всех гифок не буду (тут у меня есть пример скролла для яндекс-плейлиста, можете с него пример брать).
Код:
# pip install selenium
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
def get_urls(driver):
urls = []
for link in driver.find_elements_by_css_selector('figure.media-thumb.desktop link[itemprop=contentUrl]'):
url_gif = link.get_attribute('content')
gif_id = url_gif.split('/')[-1]
url_download = URL_DOWNLOAD_TEMPLATE + gif_id
urls.append(url_download)
return urls
URL_DOWNLOAD_TEMPLATE = 'https://i.gifer.com/embedded/download/'
options = Options()
options.add_argument('--headless')
driver = webdriver.Firefox(options=options)
driver.get('https://gifer.com/ru/gifs/loading')
driver.implicitly_wait(20)
urls = get_urls(driver)
print(f'{len(urls)}: {urls}')
# 4: ['https://i.gifer.com/embedded/download/g0R5.gif', 'https://i.gifer.com/embedded/download/VAyR.gif', 'https://i.gifer.com/embedded/download/ZKZx.gif', 'https://i.gifer.com/embedded/download/ZZ5H.gif']
# Small scroll down
driver.execute_script(f'window.scrollTo(0, 200);')
urls = get_urls(driver)
print(f'{len(urls)}: {urls}')
# 8: ['https://i.gifer.com/embedded/download/g0R5.gif', 'https://i.gifer.com/embedded/download/VAyR.gif', 'https://i.gifer.com/embedded/download/ZKZx.gif', 'https://i.gifer.com/embedded/download/ZZ5H.gif', 'https://i.gifer.com/embedded/download/g0R9.gif', 'https://i.gifer.com/embedded/download/ZWdx.gif', 'https://i.gifer.com/embedded/download/7pld.gif', 'https://i.gifer.com/embedded/download/AqCa.gif']
driver.quit()