@yonshou

Как добавить новую пару в существующий словарь Python?

Помогите пожалуйста в вопросе... Пишу парсер магазина, который должен проходить по ссылке каждого значения атрибута в фильтре, в отдельных категориях и собирать информацию по товарам в словарь, со структурой
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
  • Вопрос задан
  • 137 просмотров
Решения вопроса 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
С телефона не осилил код, но в общем случае добавлять надо так:
my_dict = {“key”: “value”}
my_dict.update({“new_key”: “new_value”})
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час