Scrapy json响应转换为utf-8编码

时间:2017-01-04 07:28:36

标签: python json scrapy scrapy-spider

我已编写以下代码来废弃网站上的数据。

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 的新手,我没有根据自己的情况设法找到合适的解决方案。

提前致谢!

3 个答案:

答案 0 :(得分:9)

首先,dplyr::select是有效的JSON数据

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

任何解释这些数据的程序都应该理解(即解码)这些字符。 Python >>> import json >>> d = json.loads('''{"url": "/book/category/271/\u09a8\u09be\u099f\u0995", "name": "\u09a8\u09be\u099f\u0995"}''') >>> print(d['name']) নাটক 模块调用此ensure_ascii

  

如果ensure_ascii为true(默认值),则输出中的所有非ASCII字符都使用\ uXXXX序列进行转义,结果是仅包含ASCII字符的str实例。

这是Scrapy供稿导出器默认使用的JSON输出。

但是如果你需要输出JSON文件来使用其他编码,例如UTF-8,你可以使用Scrapy' FEED_EXPORT_ENCODING setting

json

答案 1 :(得分:1)

要在命令行中运行,请使用选项“ --set FEED_EXPORT_ENCODING = utf-8”:

scrapy runspider --set FEED_EXPORT_ENCODING=utf-8 .\TheScrapyScript.py -o TheOutputFile.json

答案 2 :(得分:0)

在settings.py, 添加以下行: FEED_EXPORT_ENCODING = 'utf-8'