Scrapy Item не возвращает юникод при добавлении в dataframe? - PullRequest
0 голосов
/ 27 мая 2019

Я использую Scrapy Pipeline, чтобы передать все элементы в информационный фрейм.

Код работает хорошо, но текст в кодировке Юникод не отображается правильно на выходе кадра данных.

Однако результат в 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'Salon \ xc3 \ xb4 t \ xc3 \ xb4 \ xc3 \ x81nh L \ xc3 \ xbd b \ xc3 \ xa1n xe Киа Каренс с \ xe1 \ xba \ xa3n xu \ xe1 \ xba \ xa5t 2015 м \ xc3 \ xa0u c \ xc3 \ xa1t '

1 Ответ

0 голосов
/ 28 мая 2019

Указанный вами неверный вывод представляет собой строку байтов в кодировке UTF-8, соответствующую требуемой текстовой строке.

У вас есть два варианта:

  • Удалите .encode('utf-8') из вашего кода.

  • Добавить .decode('utf-8') при чтении строки из кадра данных.

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