Сейчас пишу парсер на Python, чтобы спарсить товары с сайта обоев. Не понимаю, как получить весь текст, потому что там несколько одинаковых тэгов

Пример кода с целевого сайта

import requests
from bs4 import BeautifulSoup
import csv

HOST = 'https://samara.oboigrad.ru/'
URL = 'https://samara.oboigrad.ru/catalog/'
HEADERS = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134 Safari/537.36 OPR/89.0.4447.104'
}

def get_html(url, params=''):
    r = requests.get(url, headers=HEADERS, params=params)
    return r

def get_content(html):
    soup = BeautifulSoup(html, 'html.parser')
    items = soup.find_all('div', class_='item product sku')
    products = []

    for item in items:
        products.append(
            {
                'title':item.find('span', class_='middle').get_text(),
                'text': item.find('span', class_='prop').find('p').get_text(),
                'img': item.find('div', class_='productColImage').find('a').find('img').get('src'),
            }
        )
    return products

html = get_html(URL)
print(get_content(html.text))

В текст возвращает только это:

'text': 'Размер: 10.05 х 0.53'

Ещё вопрос по тому, как материал откинуть в отдельный контейнер. И как-то возможно написать код, чтобы парсер заходил на более подробную версию товара и возвращал почти все данные?


Ответы (1 шт):

Автор решения: Сергей Ш
def get_content(html):
    soup = BeautifulSoup(html, 'html.parser')
    items = soup.find_all('div', class_='product')
    products = []

    for item in items:
        products += [
            {
                'title': item.find('span', class_='middle').get_text(),
                #'text': [*item.find('span', class_='prop').stripped_strings],
                'img': f"https://samara.oboigrad.ru{item.find('a', class_='picture').find('img').get('src')}",
            } | dict(x.split(':') for x in item.find('span', class_='prop').stripped_strings)
        ]

    return products
→ Ссылка