utf8编码中的Scrapy json响应转换

2024-10-01 07:42:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了以下代码来从一个站点删除数据。在

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我没能根据我的情况找到一个合适的解决方案。在

提前谢谢!在


Tags: namefromimporturlresponseextracturlsstart
1条回答
网友
1楼 · 发布于 2024-10-01 07:42:48

首先,{"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'])
নাটক

任何解释这些数据的程序都应该理解(即解码)字符。Pythonjson模块调用此ensure_ascii

If ensure_ascii is true (the default), all non-ASCII characters in the output are escaped with \uXXXX sequences, and the result is a str instance consisting of ASCII characters only.

这是Scrapy feed exporter默认用于JSON输出的内容。在

但是如果您需要输出JSON文件来使用其他编码,比如UTF-8,那么可以使用Scrapy的^{} setting。在

^{pr2}$

相关问题 更多 >