Python. Парсинг. Как создать заголовки(N, Наименование) для полученных данных и так же сохранить?
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 шт):
Автор решения: Namerek
→ Ссылка
Цены взяты из раскрывающихся списков с размерами
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 |