2017-01-04 5 views
2

Я написал следующий код, чтобы отменить данные с сайта.Scrapy json response convert in utf-8 encode

import scrapy 
from porua_scrapper.items import Category 
from porua_scrapper.config import SITE_URL 


class CategoriesSpider(scrapy.Spider): 
    name = "categories" 
    start_urls = [] 
    for I in range(2): 
     url = SITE_URL + "book/categories?page=" + str(I+1) 
     start_urls.append(url) 

    print(start_urls) 


    def parse(self, response): 
     # print(response.css('ul.categoryList li div.pFIrstCatCaroItem a').extract_first()) 

     for category in response.css('ul.categoryList li'): 
      categoryObj = Category() 

      categoryObj['name'] = category.css('div.bookSubjectCaption h2::text').extract_first() 
      categoryObj['url'] = category.css('a::attr(href)').extract_first() 

      yield categoryObj 

Когда я запускаю команду scrapy crawl categories -o categories.json он будет создавать categories.json файл, содержащий нужный формат вывода. Но проблема в том, что некоторые из моего содержания содержат текст bengali. Таким образом, в сгенерированном выходном файле я получил ответ, как:

{"url": "/book/category/271/\u09a8\u09be\u099f\u0995", "name": "\u09a8\u09be\u099f\u0995"}

Как я должен закодировать содержимое в utf-8? Поскольку я новичок в scrapy Мне не удалось найти подходящее решение, основанное на моем сценарии.

Заранее благодарен!

ответ

7

Прежде всего, {"url": "/book/category/271/\u09a8\u09be\u099f\u0995", "name": "\u09a8\u09be\u099f\u0995"} ли действительные данные JSON

>>> import json 
>>> d = json.loads('''{"url": "/book/category/271/\u09a8\u09be\u099f\u0995", "name": "\u09a8\u09be\u099f\u0995"}''') 
>>> print(d['name']) 
নাটক 

и любая программа интерпретации этих данных следует понять (то есть декодировать) символы просто отлично. Python json модуль называет это ensure_ascii:

Если ensure_ascii истинно (по умолчанию), все символы не-ASCII в выводе экранируются \ ихххх последовательностей, и результатом является экземпляр Обл, состоящий только из ASCII-символов.

Это то, что экспортер фитотерапии использует по умолчанию для выхода JSON.

Но если вам нужен выходной файл JSON для использования другой кодировки, такой как UTF-8, вы можете использовать Scrapy's FEED_EXPORT_ENCODING setting.

FEED_EXPORT_ENCODING = 'utf-8'