RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1401331
Accepted
Timur
Timur
Asked:2022-06-18 14:51:17 +0000 UTC2022-06-18 14:51:17 +0000 UTC 2022-06-18 14:51:17 +0000 UTC

保存到 CSV 时出错 [关闭]

  • 772
关闭 这个问题是题外话。目前不接受回复。

该问题是由不再复制的问题或错字引起的。虽然类似的问题可能与本网站相关,但该问题的解决方案不太可能帮助未来的访问者。通常可以通过在发布问题之前编写和研究一个最小程序来重现问题来避免此类问题。

5 个月前关闭。

改进问题

无法将结果保存到 CSV,错误:

writer.writerow([item['Product'], item['Price']])
TypeError: list indices must be integers or slices, not str

编码:


    s = Service('C:/Users/user/Desktop/полезно/chromedriver.exe')
browser = webdriver.Chrome(service=s)
CSV = 'cards.csv'
URL = 'https://www.ozon.ru/category/mayonez-9286/?delivery=2'
HEADERS = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/'
                         '100.0.4896.75 Safari/537.36',
           'accept': '*/*'}
def get_html(url, params=''):
    r = requests.get(url, headers=HEADERS, params=params)
    return r

webAdr = get_html(URL)
browser.get(webAdr.url)

# кликаем в ввод города
button = browser.find_element(By.XPATH, '//*[@id="layoutPage"]/div[1]/div[1]/div/div/button/span/span')
button.click()

# вводим город
city_inp = browser.find_element(By.CLASS_NAME, 'ui-h8')
city = "Санкт Петербург"
time.sleep(1)
city_inp.send_keys(city)
time.sleep(1)
city_list = browser.find_element(By.CLASS_NAME,'s4g')
city_inp.send_keys(Keys.ENTER)

# парсим
time.sleep(3)
#soup = BeautifulSoup(browser.page_source,'lxml')
#print(len(soup.find_all('div', class_='n9i')))

#html = browser.page_source
def get_content():
    soup = BeautifulSoup(browser.page_source,'lxml')
    items = soup.find_all('div', class_='oi0 i1o')
    cards = []

    for item in items:
        cards.append(
            {
                'Cat': soup.find('h1', class_='ip5').get_text(strip=True),
                'City': soup.find('span', class_='ui-f0').get_text(strip=True),
                'Product': item.find('span', class_='ed d0e e0d ed2 tsBodyL i5m').get_text(strip=True),
                'Price': item.find('div', class_='ui-s2').get_text(strip=True)
            }
        )
    return cards
#html = get_html(browser.current_url)
#print(get_content())

def save_doc(items, path):
    with open(path, 'w', encoding="utf-32", newline='') as file:
        writer = csv.writer(file, delimiter=';')
        writer.writerow(['Категория','Город','Продукт', 'Цена'])
        for item in items:
            writer.writerow([item['Cat'], item['City'], item['Product'], item['Price']])

def parser():
    ht = get_html(browser.current_url)
    if ht.status_code == 200:
        #cards = []
        cards = get_content()
        save_doc(cards, CSV)
    else:
        print('Error')
python csv
  • 2 2 个回答
  • 61 Views

2 个回答

  • Voted
  1. gil9red
    2022-06-18T15:00:50Z2022-06-18T15:00:50Z

    该错误意味着您的列表正在通过字符串而不是索引访问元素,即 item你没有字典,但有一个列表:

    writer.writerow([item['Product'], item['Price']])

    TypeError:列表索引必须是整数或切片,而不是 str

    收到此错误的示例:

    item = ['123']
    print(item['Product'])
    # TypeError: list indices must be integers or slices, not str
    
    • 0
  2. Best Answer
    CrazyElf
    2022-06-18T16:33:16Z2022-06-18T16:33:16Z
    cards = []
    cards.append(get_content())
    save_doc(cards, CSV)
    

    get_content返回嵌套在另一个列表中的字典列表。save_doc需要一个字典列表,而不是嵌套在另一个列表中的第一个元素的字典列表。这很容易修复 - 按原样传递列表,无需这些操作:

    cards = get_content()
    save_doc(cards, CSV)
    

    而且,如果您真的想创建所需格式的新列表,请使用extend,而不是append,那么字典列表不会立即全部落入新列表的一个元素中,而是会散布在新列表中将再次成为字典列表:

    cards = []
    cards.extend(get_content())
    save_doc(cards, CSV)
    
    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5