Пока что код в основном пишу по образцу, пытаюсь сделать парсер и по мере изучения данной темы, появляются все новые и новые вопросы относительно моего проекта.
Если есть такая возможность, помогите с написанием кода. есть URL с адресом, как реализовать в моем коде динамические изменения https://www.eldorado.ru/c/televizory/?sort=-date_create на
https://www.eldorado.rutelevizory/c/{категории из словоря}/?sort=-date_create'
а вот и сам код.
Буду рад любой помищи.
import requests
from bs4 import BeautifulSoup
import csv
CSV = 'cars.csv'
HOST = 'https://www.eldorado.ru'
URL = 'https://www.eldorado.ru/c/televizory/?sort=-date_create'
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 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36'
}
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('li', class_='ListingProductCardList_productCardListingWrapper__3-o9i')
cars = []
for item in items:
try:
cars.append({
'title': item.find('a', class_='ListingProductCardList_productCardListingLink__1JIMi').get_text(strip=type),
'link': HOST + item.find('a', class_='ListingProductCardList_productCardListingLink__1JIMi').get('href'),
'cash': item.find('span', class_='PriceBlock_buyBoxPrice__3QGyj PriceBlock_buyBoxPriceStyled__29J_G').get_text(strip=type),
# 'city': item.find('div', class_='_93444fe79c--labels--1J6M3').get_text(strip=type),
'img': item.find('a', class_='ListingProductCardList_productCardListingImageContainer__FqE33').find('img').get('src')
# 'img': HOST + item.find('div', class_='_93444fe79c--container--3FC45').find('img').get('src')
})
except:
pass
return cars
def save_doc(items, path):
with open(path, 'w', newline='') as file:
writer = csv.writer(file, delimiter=';')
writer.writerow(['Название продукта', 'ссылка', 'цена', 'картинка'])
for item in items:
writer.writerow([item['title'], item['link'], item['cash'], item['img']])
def parser():
PAGINATION = input('количество')
PAGINATION = int(PAGINATION.strip())
html = get_html(URL)
if html.status_code == 200:
cars = []
for page in range(1, PAGINATION + 1):
print(f'Парсим страницу: {page}')
html = get_html(URL, params={'page': page})
cars.extend(get_content(html.text))
save_doc(cars, CSV)
pass
else:
print('Ошибка')
parser()