Я написал webscraper, который очищает данные о бейсболе NBA от Баскетбольная ссылка . Указанная c веб-страница, на которой происходит моя ошибка:
UnicodeEncodeError: 'charmap' codec can't encode character '\u0107' in position 11: character maps to <undefined>
, здесь . И, наконец, указанные c данные игрока, которые запускают его и выдают этот указанный c UnicodeEncodeError, равны этому (хотя я уверен, что ошибка является более обобщенной и будет произведена с любым символом, который содержит непонятный знак ударения).
Минимальный воспроизводимый код:
def get_boxscore_basic_table(tag): #used to only get specific tables
tag_id = tag.get("id")
tag_class = tag.get("class")
return (tag_id and tag_class) and ("basic" in tag_id and "section_wrapper" in tag_class and not "toggleable" in tag_class)
import requests
from bs4 import BeautifulSoup
import lxml
import csv
import re
website = 'https://www.basketball-reference.com/boxscores/202003110MIA.html'
r = requests.get(website).text
soup = BeautifulSoup(r, 'lxml')
tables = soup.find_all(get_boxscore_basic_table)
in_file = open('boxscore.csv', 'w', newline='')
csv_writer = csv.writer(in_file)
column_names = ['Player','Name','MP','FG','FGA','FG%','3P','3PA','3P%','FT','FTA','FT%','ORB','DRB','TRB','AST','STL','BLK','TOV','PF','PTS','+/-']
csv_writer.writerow(column_names)
for table in tables:
rows = table.select('tbody tr')
for row in rows:
building_player = [] #temporary container to hold player and stats
player_name = row.th.text
if 'Reserves' not in player_name:
building_player.append(player_name)
stats = row.select('td.right')
for stat in stats:
building_player.append(stat.text)
csv_writer.writerow(building_player) #writing to csv
in_file.close()
Как лучше всего обойти это?
Я видел кое-что в Интернете об изменении кодировки и, в частности, об использовании метода .encode('utf-8')
в строке перед записью в csv, но кажется, что это метод .encode (), хотя он останавливает ошибку из будучи брошенным, имеет несколько своих проблем. Например; player_name.encode('utf-8')
перед записью в csv превращает имя 'Willy Hernangómez' в 'b'Willy Hernang \ xc3 \ xb3mez' 'в пределах csv ... не совсем шаг в правильном направлении.
Любая помощь в этом и объяснение того, что происходит, будет высоко ценится!