执行程序时显示错误:KeyError: 'proba'
我无法理解问题是什么,请帮忙
import requests
from bs4 import BeautifulSoup
import csv
import os
URL = 'https://ptk-svarka.ru/catalog/apparaty-poluavtomaticheskoy-svarki-mig'
HEADERS = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36', 'accept': '*/*'}
FILE = 'svarka.csv'
def get_html(url, params=None):
r = requests.get(url, headers=HEADERS, params=params)
return r
def get_pages_count(html):
soup = BeautifulSoup(html, 'html.parser')
pagination = soup.find_all('span', class_='mhide')
if pagination:
return int(pagination[-1].get_text())
else:
return 1
def get_content(html):
soup = BeautifulSoup(html, 'html.parser')
items = soup.find_all('div', class_='b-grid__item js-product-item')
i = soup.find_all('div', class_='b-navbar')
svarka = []
for item in items:
svarka.append({
"title": item.find('div', class_='b-products__title').get_text(strip=True),
"text": item.find('a', class_='b-products__text').get_text(strip=True),
"label": item.find('ul', class_='b-products__labels').get_text(strip=True).replace(':', ': '),
"price": item.find('span', class_='b-products__price').find_next('span').get_text(strip=True).replace(' ', '').replace('р', '').replace('\xa0', '.00'),
"image": item.find('img', class_='lozad').get('data-src'),
"articul": item.find('div', class_='b-products__meta').get_text(strip=True).replace('Артикул: ',''),
"stranica": item.find('a', class_='b-products__text').get('href'),
})
for item in i:
svarka.append({
"proba": item.find('ul', class_='menu').get_text(strip=True)
})
return svarka
def save_file(svarka, path):
with open(path, 'w', newline='') as file:
writer = csv.writer(file, delimiter=';')
writer.writerow(['Название', 'Описание', 'Лейбел', 'Цена', 'Картинка', 'Артикул', 'Ссылка', 'proba'])
global item
for item in svarka:
writer.writerow([item["title"], item["text"], item["label"], item["price"], item["image"], item["articul"], item["stranica"], item["proba"]])
def djfdk ():
for item2 in i:
writer.writerow([item2['proba']])
def parse():
URL = input('Введите URL: ')
URL = URL.strip()
html = get_html(URL)
if html.status_code == 200:
svarka = get_content(html.text)
save_file(svarka, FILE)
print(f'Получено {len(svarka)} сварочных аппаратов')
os.startfile(FILE)
else:
print('Error')
parse()
我猜是在从网站收集数据之后。你会得到一个这样的列表
在函数中,
save_file()您逐个元素地通过svarka列表(元素 = 列表中的字典)并将元素数据写入文件,但是,由于您组织列表的方式,您会收到此错误,因为取第一个字典中列表(以及更多)的元素没有键“proba”您需要重写函数的逻辑,
get_content()以便将带有键“proba”的字典添加到现有字典中,而不是单独编写,您可以这样做:问题是,这样的结构是否正确?