Запись результатов из Python в CSV-файл [UnicodeEncodeError: кодек 'charmap' не может закодировать символ - PullRequest
0 голосов
/ 05 октября 2018

Я пытался написать сценарий, который потенциально мог бы очистить список имен пользователей из раздела комментариев на определенном видео 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 работает с юникодами и виделпотенциальное решение о загрузке и установке пакета библиотеки Unicode, но это тоже не помогло.

Может ли кто-нибудь помочь мне понять, что я делаю неправильно?

PS.Я использую последнюю версию python (3.7).

Очень признателен, Сергей.

1 Ответ

0 голосов
/ 03 марта 2019

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...