Я использую Scrapy Pipeline для передачи всех элементов в фреймворк данных.
Код работает хорошо, но текст Unicode не отображается правильно на выходе кадра данных.
Однако результат в файле csv, экспортированном feed_exporter, по-прежнему в порядке. Не могли бы вы, ребята, посоветовать?
Вот код
#In pipelines.py
class CrawlerPipeline(object):
def open_spider(self, spider):
settings = get_project_settings()
self.df = pd.DataFrame(columns=settings.get('FEED_EXPORT_FIELDS'))
print('SUCCESS CREATE DATAFRAME', self.df.columns)
def process_item(self, item, spider):
self.df = self.df.append([dict(item)]) #I think it has problem in this line of code
print('SUCCESS APPEND RECORD TO DATAFRAME, DF LEN:', len(self.df))
return item
#In spider.py
def parse_detail_page(self, response):
ads = CrawlerItem()
ads['body'] = (response.css('#sgg > div > div> div.car_des > div::text').extract_first() or "").encode('utf-8').strip()
yield(ads)
Это неправильный вывод очищенного текста:
b'Салон \xc3\xb4 t\xc3\xb4 \xc3\x81nh L\xc3\xbd b\xc3\xa1n xe Киа Каренс s\xe1\xba\xa3n xu\xe1\xba\xa5t 2015 m\xc3\xa0u c \xc3\xa1t'
Упомянутый вами вывод неправильный представляет собой строку байтов в кодировке UTF-8, соответствующую желаемой текстовой строке.
У вас есть два варианта:
Удалите .encode('utf-8')
из своего кода.
Добавьте .decode('utf-8')
при чтении строки из фрейма данных.