Помогите пожалуйста в вопросе... Пишу парсер магазина, который должен проходить по ссылке каждого значения атрибута в фильтре, в отдельных категориях и собирать информацию по товарам в словарь, со структурой
productDict[article] = {
"Артикул": article,
"Наименование": title,
"Категория": subCatNamesList[subCatNameCount],
"Описание": description,
"Цена": price,
"Изображения": imagesUrlsList,
}
где ключ article - это Артикул товара который есть уникальным и у которого есть свой словарь... В этом подсловаре есть неизменные значения Артикул, Наименование, Категория, Описание, Цена, Изображения.... а так же должны присутствовать динамические значения являющие собой атрибут товара и значение атрибута, в коде они представлены как attrName и attrValue, которые изменяются по ходу цикла и должны добавляться в словарь когда мы проходим по каждому значению атрибута.
Проблема вот в чём... когда я пытаюсь добавить новую пару productDict[article][attrName] = attrValue, то она заменяет существующую пару {attrName: attrValue}, хотя значения этих переменных изменяются если выводить их через print().
В чём ошибка?
subCatUrls = soup.find_all("a", class_="catalog-main__item-link-wrapper")
subCatUrlList = []
for subCatUrl in subCatUrls:
subCatUrl = subCatUrl.get("href")
subCatUrlList.append(subCatUrl)
subCatNameCount = 0
count = 0
productDict = dict()
response = requests.get(subCatUrlList[1], headers=headers, verify=False)
html = response.text
soup = BeautifulSoup(html, "html.parser")
checkBoxUrls = soup.find_all("input", class_="filter-main__element-checkbox")
checkBoxUrlsList = []
for checkBoxUrl in checkBoxUrls:
checkBoxUrl = checkBoxUrl.get("data-href")
if checkBoxUrl != subCatUrlList[1] + "/0:0":
checkBoxUrlsList.append(checkBoxUrl)
for checkBoxUrl in checkBoxUrlsList:
response = requests.get(checkBoxUrl, headers=headers, verify=False)
html = response.text
soup = BeautifulSoup(html, "html.parser")
attrName = soup.find("span", class_="filter__label").text
attrValue = soup.find("span", class_="filter__delete-text").text
prodItemUrlsList = []
if soup.find_all("a", class_="paggination__page"):
paggNums = soup.find_all("a", class_="paggination__page")
for paggNum in paggNums:
paggNum = paggNum.text
response = requests.get(checkBoxUrl + ";page:" + paggNum, headers=headers, verify=False)
html = response.text
soup = BeautifulSoup(html, "html.parser")
prodItemUrls = soup.find_all("a", class_="categories__item-img-wrapper")
prodItemUrlsList = []
for prodItemUrl in prodItemUrls:
prodItemUrl = prodItemUrl.get("href")
response = requests.get(prodItemUrl, headers=headers, verify=False)
html = response.text
soup = BeautifulSoup(html, "html.parser")
article = soup.find("span", class_="card-header__card-articul-text-value").text.replace("\n","")
title = soup.find("h1", class_="card-header__headline").text.replace("\n","")
description = soup.find("div", class_="card-header__card-info-text").text.replace("\n","").replace("\t","")
description = ' '.join(description.split())
if soup.find("div", class_="card-header__card-price-new"):
price = soup.find("div", class_="card-header__card-price-new").text.replace("\xa0","").replace("грн","")
else:
price = "0"
imagesUrlsList = []
if soup.find_all("img", class_="card-header__card-images-dots-image"):
imagesUrls = soup.find_all("img", class_="card-header__card-images-dots-image")
for imageUrl in imagesUrls:
imageUrl = root_url + imageUrl.get("src")
imagesUrlsList.append(imageUrl)
else:
imageUrl = soup.find("img", class_="card-header__card-images-image").get("src")
imagesUrlsList.append(root_url + imageUrl)
imagesUrlsList = ','.join(map(str, imagesUrlsList))
productDict[article] = {
"Артикул": article,
"Наименование": title,
"Категория": subCatNamesList[subCatNameCount],
"Описание": description,
"Цена": price,
"Изображения": imagesUrlsList,
}
productDict[str(article)][str(attrName)] = str(attrValue)
print(article)
print(attrName + ": " + attrValue)
count += 1
print(count)
else:
response = requests.get(checkBoxUrl, headers=headers, verify=False)
html = response.text
soup = BeautifulSoup(html, "html.parser")
prodItemUrls = soup.find_all("a", class_="categories__item-img-wrapper")
prodItemUrlsList = []
for prodItemUrl in prodItemUrls:
prodItemUrl = prodItemUrl.get("href")
response = requests.get(prodItemUrl, headers=headers, verify=False)
html = response.text
soup = BeautifulSoup(html, "html.parser")
article = soup.find("span", class_="card-header__card-articul-text-value").text.replace("\n","")
title = soup.find("h1", class_="card-header__headline").text.replace("\n","")
description = soup.find("div", class_="card-header__card-info-text").text.replace("\n","").replace("\t","")
description = ' '.join(description.split())
if soup.find("div", class_="card-header__card-price-new"):
price = soup.find("div", class_="card-header__card-price-new").text.replace("\xa0","").replace("грн","")
else:
price = "0"
imagesUrlsList = []
if soup.find_all("img", class_="card-header__card-images-dots-image"):
imagesUrls = soup.find_all("img", class_="card-header__card-images-dots-image")
for imageUrl in imagesUrls:
imageUrl = root_url + imageUrl.get("src")
imagesUrlsList.append(imageUrl)
else:
imageUrl = soup.find("img", class_="card-header__card-images-image").get("src")
imagesUrlsList.append(root_url + imageUrl)
imagesUrlsList = ','.join(map(str, imagesUrlsList))
productDict[article] = {
"Артикул": article,
"Наименование": title,
"Категория": subCatNamesList[subCatNameCount],
"Описание": description,
"Цена": price,
"Изображения": imagesUrlsList,
}
productDict[str(article)][str(attrName)] = str(attrValue)
count += 1
print(count)
print(productDict)
subCatNameCount += 1