【问题标题】:Scrapy json response convert in utf-8 encodeScrapy json 响应转换为 utf-8 编码
【发布时间】:2017-05-18 10:10:17
【问题描述】:

我编写了以下代码来从网站中删除数据。

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 的新手,因此我没有设法根据我的场景找到合适的解决方案。

提前致谢!

【问题讨论】:

    标签: python json scrapy scrapy-spider


    【解决方案1】:

    首先{"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 字符都使用 \uXXXX 序列进行转义,结果是仅由 ASCII 字符组成的 str 实例。

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

    但是如果你需要输出JSON文件使用另一种编码,比如UTF-8,你可以使用Scrapy的FEED_EXPORT_ENCODING setting

    FEED_EXPORT_ENCODING = 'utf-8'
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-11-15
          • 1970-01-01
          • 2016-08-24
          • 2019-05-21
          • 2012-06-30
          • 2011-06-26
          • 1970-01-01
          • 2014-02-02
          相关资源
          最近更新 更多