将结果写入python到csv文件[UnicodeEncodeError:'charmap'编解码器不能编码字符

问题描述 投票:0回答:1

我一直在尝试编写一个脚本,该脚本可能会在已定义的YouTube视频的评论部分中删除用户名列表,并将这些用户名粘贴到.csv文件中。

这是脚本:

from selenium import webdriver
import time
import csv
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup as soup
driver=webdriver.Chrome()
driver.get('https://www.youtube.com/watch?v=VIDEOURL')
time.sleep(5)
driver.execute_script("window.scrollTo(0, 500)")
time.sleep(3)
html = driver.find_element_by_tag_name('html')
html.send_keys(Keys.END)
time.sleep(5)
scroll_time = 40
for num in range(0, scroll_time):
    html.send_keys(Keys.PAGE_DOWN)
for elem in driver.find_elements_by_xpath('//span[@class="style-scope ytd-comment-renderer"]'):
    print(elem.text)
    with open('usernames.csv', 'w') as f:
        p = csv.writer(f)
        p.writerows(str(elem.text));

它不断抛出第19行的错误:

return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u30b9' in position 0: character maps to <undefined>

我在这里读到,这可能与windows console如何处理unicode有关,并且看到了关于下载和安装unicode库包的潜在解决方案,但这也无济于事。

谁能帮我弄清楚我做错了什么?

PS。我正在使用最新版本的python(3.7)。

非常感谢,Sergej。

python-3.x csv selenium-webdriver python-unicode
1个回答
1
投票

Python 3 str值在写入磁盘时需要编码为字节。如果没有为文件指定编码,Python将使用平台默认值。在这种情况下,默认编码无法编码'\ u0389',因此会引发UnicodeEncodeError

解决方案是在打开文件时将编码指定为UTF-8:

with open('usernames.csv', 'w', encoding='utf-8') as f:
    p = csv.writer(f)
    ...

由于UTF-8不是您平台的默认编码,因此您还需要在打开文件时,在Python代码或Excel等应用程序中指定编码。

© www.soinside.com 2019 - 2024. All rights reserved.