Scrapy json 响应转换为 utf-8 编码
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 的新手,我没能根据我的情况找到合适的解决方案。
提前致谢!
首先,{"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:
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 提要导出器默认用于 JSON 输出的内容。
但是如果你需要输出的JSON文件使用其他编码,比如UTF-8,你可以使用Scrapy的FEED_EXPORT_ENCODING
setting.
FEED_EXPORT_ENCODING = 'utf-8'
在settings.py,
添加以下行:
FEED_EXPORT_ENCODING = 'utf-8'
要在 command-line 中 运行 使用选项 "--set FEED_EXPORT_ENCODING=utf-8":
scrapy runspider --set FEED_EXPORT_ENCODING=utf-8 .\TheScrapyScript.py -o TheOutputFile.json
我编写了以下代码来从站点中抓取数据。
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 的新手,我没能根据我的情况找到合适的解决方案。
提前致谢!
首先,{"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:
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 提要导出器默认用于 JSON 输出的内容。
但是如果你需要输出的JSON文件使用其他编码,比如UTF-8,你可以使用Scrapy的FEED_EXPORT_ENCODING
setting.
FEED_EXPORT_ENCODING = 'utf-8'
在settings.py,
添加以下行:
FEED_EXPORT_ENCODING = 'utf-8'
要在 command-line 中 运行 使用选项 "--set FEED_EXPORT_ENCODING=utf-8":
scrapy runspider --set FEED_EXPORT_ENCODING=utf-8 .\TheScrapyScript.py -o TheOutputFile.json