Сейчас пишу парсер на 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
