Duff89/parser_avito

Ошибка с кодировкой данных для записи данных в файл, как можно поменять кодировку?

fmfnjnf opened this issue · 5 comments

2023-05-16 18:19:14.771 | ERROR | parser_cls:__paginator:79 - An error has been caught in function '__paginator', process 'MainProcess' (31792), thread 'Thread-3' (20864):
Traceback (most recent call last):

File "n39\lib\threading.py", line 930, in _bootstrap
self._bootstrap_inner()
│ └ <function Thread._bootstrap_inner at 0x000002556E521550>
└ <Thread(Thread-3, started 20864)>

File "\threading.py", line 973, in _bootstrap_inner
self.run()
│ └ <function Thread.run at 0x000002556E521310>
└ <Thread(Thread-3, started 20864)>

File "39\lib\threading.py", line 910, in run
self._target(*self._args, **self._kwargs)
│ │ │ │ │ └ {}
│ │ │ │ └ <Thread(Thread-3, started 20864)>
│ │ │ └ ()
│ │ └ <Thread(Thread-3, started 20864)>
│ └ <bound method Window.start_scraping of <main.Window object .>>
└ <Thread(Thread-3, started 20864)>

File "ito-master\AvitoParser.py", line 150, in start_scraping
self.run_parse()
│ └ <function Window.run_parse at 0x00000255710DA700>
└ <main.Window object .>

File "aster\AvitoParser.py", line 249, in run_parse
AvitoParse(
└ <class 'parser_cls.AvitoParse'>

File "parser_avito-master\parser_cls.py", line 252, in parse
self.__paginator()
└ <parser_cls.AvitoParse object at 0x00000255710CEBB0>

File "ser_avito-master\parser_cls.py", line 79, in __paginator
self.__parse_page()
└ <parser_cls.AvitoParse object at 0x00000255710CEBB0>

File "master\parser_cls.py", line 126, in __parse_page
self.__save_data(data=data)
│ └ {'name': 'Мониторы 24 IPS Fujitsu B24W-7 LED', 'description': 'Мониторы Fujitsu B24W-7 Led — В наличии 200шт. Гарантия от маг...
└ <parser_cls.AvitoParse object at 0x00000255710CEBB0>

File "ster\parser_cls.py", line 189, in __save_data
writer.writerow([
│ └ <method 'writerow' of '_csv.writer' objects>
└ <_csv.writer object at 0x0000025572C5F630>

File "\Python39\lib\encodings\cp1251.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
│ │ │ │ │ └ <EncodingMap object at 0x000002556DACBBD0>
│ │ │ │ └ 'strict'
│ │ │ └ <encodings.cp1251.IncrementalEncoder object at 0x0000025573674D90>
│ │ └ 'Мониторы 24 IPS Fujitsu B24W-7 LED,7500,https://www.avito.ru/moskva/tovary_dlya_kompyutera/monitory_24_ips_fujitsu_b24w-7_le...
│ └
└ <module 'codecs' from '\Python\Python39\lib\codecs.py'>

UnicodeEncodeError: 'charmap' codec can't encode character '\xb2' in position 393: character maps to
2023-05-16 18:20:34.648 | SUCCESS | parser_cls:__pretty_log:138 -
Монитор LG 25UM58-P 25'' UW-FHD
Цена: 10000
Описание: Продаю свой монитор в связи с приобретением нового. Состояние хорошее. За время использования чутка подпортился внешний вид (небольшие царапины на ножке). Диагональ — 25 дюймов. Тип матрицы — Ips. Разрешение — 2560 × 1080 (стороны 21:9). Время отклика — 5 мс. Яркость — 250 кд/м2. Контрастность — 1000:1. 2 порта Hdmi (в комплекте переходник vga-hdmi). + кабель Hdmi-Hdmi.
Просмотров: 0
Дата публикации: сегодня в 18:00
Продавец: Частное лицо
Ссылка: https://www.avito.ru/moskva/tovary_dlya_kompyutera/monitor_lg_25um58-p_25_uw-fhd_3185904982

2023-05-16 18:20:34.660 | ERROR | parser_cls:__paginator:79 - An error has been caught in function '__paginator', process 'MainProcess' (31792), thread 'Thread-3' (20864):
Traceback (most recent call last):

File "hon39\lib\threading.py", line 930, in _bootstrap
self._bootstrap_inner()
│ └ <function Thread._bootstrap_inner at 0x000002556E521550>
└ <Thread(Thread-3, started 20864)>

File "ib\threading.py", line 973, in _bootstrap_inner
self.run()
│ └ <function Thread.run at 0x000002556E521310>
└ <Thread(Thread-3, started 20864)>

File "C:\Users\Ilya\AppData\Local\Programs\Python\Python39\lib\threading.py", line 910, in run
self._target(*self._args, **self._kwargs)
│ │ │ │ │ └ {}
│ │ │ │ └ <Thread(Thread-3, started 20864)>
│ │ │ └ ()
│ │ └ <Thread(Thread-3, started 20864)>
│ └ <bound method Window.start_scraping of <main.Window object .>>
└ <Thread(Thread-3, started 20864)>

File "parser_avito-master\AvitoParser.py", line 150, in start_scraping
self.run_parse()
│ └ <function Window.run_parse at 0x00000255710DA700>
└ <main.Window object .>

File "\parser_avito-master\AvitoParser.py", line 249, in run_parse
AvitoParse(
└ <class 'parser_cls.AvitoParse'>

File " (6)\parser_avito-master\parser_cls.py", line 252, in parse
self.__paginator()
└ <parser_cls.AvitoParse object at 0x00000255710CEBB0>

File "py", line 79, in __paginator
self.__parse_page()
└ <parser_cls.AvitoParse object at 0x00000255710CEBB0>

File "er (6)\parser_avito-master\parser_cls.py", line 126, in __parse_page
self.__save_data(data=data)
│ └ {'name': "Монитор LG 25UM58-P 25'' UW-FHD", 'description': 'Продаю свой монитор в связи с приобретением нового. Состояние хор...
└ <parser_cls.AvitoParse object at 0x00000255710CEBB0>

File "\parser_avito-master\parser_cls.py", line 189, in __save_data
writer.writerow([
│ └ <method 'writerow' of '_csv.writer' objects>
└ <_csv.writer object at 0x0000025573684860>

File "\Python39\lib\encodings\cp1251.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
│ │ │ │ │ └ <EncodingMap object at 0x000002556DACBBD0>
│ │ │ │ └ 'strict'
│ │ │ └ <encodings.cp1251.IncrementalEncoder object at 0x000002557368FBB0>
│ │ └ "Монитор LG 25UM58-P 25'' UW-FHD,10000,https://www.avito.ru/moskva/tovary_dlya_kompyutera/monitor_lg_25um58-p_25_uw-fhd_31859...
│ └
└ <module 'codecs' from '\Python\Python39\lib\codecs.py'>

UnicodeEncodeError: 'charmap' codec can't encode character '\xd7' in position 345: character maps to

Duff89 commented

Замените строку №187 в файле parser_cls на:
with open(f"result/{self.title_file}.csv", mode="a", newline='', encoding='utf-8') as file:

У меня аналогичная проблема. Я сделал исправление - with open(f"result/{self.title_file}.csv", mode="a", newline='', encoding='utf-8') as file:

После этого он успешно спарсил один раз, но потом пошли ошибки вот такого вида:

11:57:20 - Проверка завершена
11:57:20 - Пауза 1 минут
11:58:30 - Страница успешно загружена. Просматриваю объявления
11:58:30 - Ошибка: 'charmap' codec can't decode byte 0x98 in position 891: character maps to <undefined>
11:58:30 - Проверка завершена
11:58:30 - Пауза 1 минут
12:00:34 - Страница успешно загружена. Просматриваю объявления
12:00:34 - Ошибка: 'charmap' codec can't decode byte 0x98 in position 891: character maps to <undefined>
12:00:34 - Проверка завершена
12:00:34 - Пауза 1 минут
12:01:43 - Страница успешно загружена. Просматриваю объявления
12:01:43 - Ошибка: 'charmap' codec can't decode byte 0x98 in position 891: character maps to <undefined>
12:01:43 - Проверка завершена
12:01:43 - Пауза 1 минут

в общем, у меня все завелось с этим параметром в 187 строке

with open(f"result/{self.title_file}.csv", mode="a", newline='', encoding='ascii', errors='ignore') as file:

Duff89 commented

Выглядит как решение, я проверю такой вариант и если всё ок, добавлю его в следующей версии. Спасибо

Duff89 commented

В связи с выходом новой версии закрываю проблему