Задать вопрос
@alexbaw09

У меня не получается спарсить ссылку на фото с сайта, help?

Сайт для парсинга: https://new-https://new-science.ru/?s=%D0%B3%D0%BB... (фото находится в теге в котором еще тег в котором атрибут scrset="ссылки которые мне нужны"

мой код:
from flask import Flask, render_template
import requests
from bs4 import BeautifulSoup

app = Flask(__name__)

import requests
from bs4 import BeautifulSoup

def fetch_articles_with_images():
url = 'https://new-science.ru/?s=глобальное+потепление'
headers = {
"User-Agent": "Mozilla/5.0"
}

articles = []
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "lxml")

posts = soup.find_all('div', class_='post-details')

for post in posts:
title_tag = post.find('h2', class_='post-title')
title = title_tag.text.strip() if title_tag else "No Title"
link = title_tag.find('a')['href'] if title_tag and title_tag.find('a') else "No Link"
views_tag = post.find('span', class_='meta-views meta-item')
views = views_tag.text.strip() if views_tag else "No Views"
date_tag = post.find('span', class_='date meta-item tie-icon')
date = date_tag.text.strip() if date_tag else "No Date"

# Поиск изображения в теге
image_url = None
picture_tag = post.find('picture')
if picture_tag:
source_tag = picture_tag.find('source')
if source_tag and 'srcset' in source_tag.attrs:
image_url = source_tag['srcset'].split(',')[0].strip() # Берем первую ссылку из srcset

articles.append({
'title': title,
'link': link,
'views': views,
'date': date,
'image': image_url
})

return articles



@app.route('/')
def home():
return render_template('index.html')

@app.route('/articles')
def articles():
articles = fetch_articles_with_images()
print(articles) # Посмотрите на вывод статей
return render_template('articles.html', articles=articles)

if __name__ == '__main__':
app.run(debug=True)
  • Вопрос задан
  • 91 просмотр
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
@rPman
Не нужно ничего там парсить, сайт предоставляет официальный механизм для автоматизации - rss
https://new-science.ru/search/%D0%B3%D0%BB%D0%BE%D...
<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
        xmlns:content="http://purl.org/rss/1.0/modules/content/"
        xmlns:wfw="http://wellformedweb.org/CommentAPI/"
        xmlns:dc="http://purl.org/dc/elements/1.1/"
        xmlns:atom="http://www.w3.org/2005/Atom"
        xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
        xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
        >

<channel>
        <title>Вы искали глобальное потепление | New-Science.ru</title>
        <atom:link href="https://new-science.ru/search/%D0%B3%D0%BB%D0%BE%D0%B1%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5+%D0%BF%D0%BE%D1%82%D0%B5%D0%BF%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5/feed/rss2/" rel="self" type="applica
tion/rss+xml" />
        <link>https://new-science.ru</link>
        <description>Актуальные новости научных открытий, высоких технологий, электроники и космоса.</description>
        <lastBuildDate>Sat, 05 Apr 2025 17:04:46 +0000</lastBuildDate>
        <language>ru-RU</language>
        <sy:updatePeriod>
        hourly  </sy:updatePeriod>
        <sy:updateFrequency>
        1       </sy:updateFrequency>
        <generator>https://wordpress.org/?v=6.7.2</generator>

<image>
        <url>https://new-science.ru/wp-content/uploads/2019/08/favicon.png</url>
        <title>Вы искали глобальное потепление | New-Science.ru</title>
        <link>https://new-science.ru</link>
        <width>32</width>
        <height>32</height>
</image>
...
                <item>
                <title>Атмосферные реки мигрируют к полюсам, изменяя климат планеты</title>
                <link>https://new-science.ru/atmosfernye-reki-migrirujut-k-poljusam-izmenyaya-klimat-planety/</link>

                <dc:creator><![CDATA[New-Science.ru]]></dc:creator>
                <pubDate>Wed, 27 Nov 2024 07:20:47 +0000</pubDate>
                                <category><![CDATA[Природа]]></category>
                <guid isPermaLink="false">https://new-science.ru/?p=47504</guid>

                                        <description><![CDATA[<img width="1200" height="525" src="https://new-science.ru/wp-content/uploads/2024/11/865-6.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" st
yle="display: block; margin-bottom: 5px; clear:both;max-width: 100%;" link_thumbnail="" decoding="async" loading="lazy" srcset="https://new-science.ru/wp-content/uploads/2024/11/865-6.jpg 1200w, https://new-scienc
e.ru/wp-content/uploads/2024/11/865-6-768x336.jpg 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" />Атмосферные реки, мощные потоки водяного пара, взвешенного в атмосфере, уже несколько десятилетий движутся
неожиданным образом, изменяя характер осадков и климат в глобальном масштабе. Что такое атмосферная река? Атмосферные реки — это огромные потоки водяного пара, которые циркулируют в атмосфере и переносят количеств
о влаги, сравнимое с крупнейшими реками на Земле, такими как Миссисипи. Эти небесные реки &#8230;]]></description>



                        </item>
        </channel>
</rss>
Ответ написан
Комментировать
Если необходим получить ссылку на .webp - файл из атрибута srcset тега source:

img_url = figure.find('source')['srcset']

К примеру код, который извлекает ссылку на картинку и скачивает файл с изображением с указанного вами сайта.

from bs4 import BeautifulSoup
import requests
import fake_useragent
import os

ua = fake_useragent.UserAgent()
headers = {"User-Agent": ua.random}

url = 'https://new-science.ru/rasseivanie-almaznyh-nanochastic-v-stratosfere-mozhet-zamedlit-globalnoe-poteplenie/'

def get_files(link, folder='images'):
    resp = requests.get(link, stream=True)
    filename = os.path.basename(link)
    if not os.path.isdir(folder):
        os.mkdir(folder)
    file = open(f"{folder}/{filename}", 'bw')
    for chunk in resp.iter_content(4096):
        file.write(chunk)
    return filename

response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')

figure = soup.find('figure', class_ ="single-featured-image")
#img_url = figure.find('img')['src']
img_url = figure.find('source')['srcset']

get_files(img_url, 'images')

print(img_url)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы