Python. Парсинг. Как создать заголовки(N, Наименование) для полученных данных и так же сохранить?

Рейтинг: 0Ответов: 1Опубликовано: 02.05.2023
import requests
from bs4 import BeautifulSoup
import csv
import pandas as pd

import numpy as np
from csv import writer
from lxml import html

headers = {
    'accept': 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
    'user-agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 OPR/94.0.0.0 (Edition Yx 02)'

}


#url = 'https://www.divan.ru/category/krovati-i-matrasy'  # делаем запрос на страницу
url = 'https://www.divan.ru/category/krovati'
response = requests.get(url)  # обработка запроса метотдом get
soup = BeautifulSoup(response.text, 'lxml')  # создаем суп
item = soup.find_all('div', {'class' : 'LlPhw'})
nami = soup.find_all('a', {'class': 'ImmXq dpmhZ b8BqN ProductName'})



for index, i in enumerate(item, start=1):
    nami = i.find('a', {'class': 'ImmXq dpmhZ b8BqN ProductName'}).text.replace("Цена:", "").replace("₸", "").strip()
    print(f'{index}. {nami}')


with open('header.csv', 'w', encoding='utf-8', newline='') as fil:
    writer = csv.writer(fil)
    for index, i in enumerate(item, start=1):
        nami = i.find('a', {'class': 'ImmXq dpmhZ b8BqN ProductName'}).text.strip()
        writer.writerow([index, nami])

Ответы

▲ 1

Цены взяты из раскрывающихся списков с размерами

from requests_toolbelt.sessions import BaseUrlSession
from bs4 import BeautifulSoup as Soup
import csv


s = BaseUrlSession('https://www.divan.ru')

response = s.get('category/krovati')

soup = Soup(response.content, 'html.parser')

items = []

columns = ['Title', 'Size', 'Price', 'Url']

for item in soup.select('div[data-testid=product-card]'):
    if title_tag := item.select_one('a.ProductName'):
        title = title_tag.get_text(strip=True)
    else:
        continue

    url = title_tag.get('href')

    params = item.select('a.ImmXq .z4mg0')

    for i in range(0, len(params), 2):
        price_tag = params[i+1]

        if span := price_tag.find('span'):
            span.replace_with('')

        items.append(
            dict(
                zip(
                    columns,
                    (title, params[i].get_text(strip=True), ''.join(filter(str.isdigit, price_tag.get_text(strip=True))), s.base_url + url)

                )
            )
        )

with open('divan.csv', 'w', encoding='utf-8-sig') as file:
    writer = csv.DictWriter(file, fieldnames=columns, dialect=csv.unix_dialect)
    writer.writeheader()
    writer.writerows(items)
Title Size Price Url
Кровать Лайтси 140 Velvet Beige 140 x 200 x 36 26990 https://www.divan.ru/product/krovat-lajtsi-140-velvet-beige
Кровать Пайл 140 Velvet Beige 90 x 200 22990 https://www.divan.ru/product/krovat-pajl-140-velvet-beige
Кровать Пайл 140 Velvet Beige 120 x 200 24990 https://www.divan.ru/product/krovat-pajl-140-velvet-beige
Кровать Пайл 140 Velvet Beige 160 x 200 x 36 27990 https://www.divan.ru/product/krovat-pajl-140-velvet-beige