Python 是否从集合元素中删除unicode字符?
python新手。我正在编写一个scraper,它生成一组值,这些值都具有unicode字符 我想知道如何从中删除unicode字符。我觉得我在使用python3,但我不知道,因为命令很粗糙,我总是使用python2。从未使用过不使用python命令运行的工具Python 是否从集合元素中删除unicode字符?,python,python-3.x,scrapy,python-unicode,Python,Python 3.x,Scrapy,Python Unicode,python新手。我正在编写一个scraper,它生成一组值,这些值都具有unicode字符 我想知道如何从中删除unicode字符。我觉得我在使用python3,但我不知道,因为命令很粗糙,我总是使用python2。从未使用过不使用python命令运行的工具 import scrapy class QuotesSpider(scrapy.Spider): name = "quotes" def start_requests(self): urls = [
import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes"
def start_requests(self):
urls = [
'http://quotes.toscrape.com/page/1/',
'http://quotes.toscrape.com/page/2/',
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
for quote in response.css('div.quote'):
yield {
'text': quote.css('span.text::text').extract_first(),
'author': quote.css('small.author::text').extract_first(),
'tags': quote.css('div.tags a.tag::text').extract(),
}
要运行的命令是
scrapy crawl quotes -o output.json
如何从响应或生成的集合中删除unicode字符?请尝试以下方法:
...
'text': quote.css('span.text::text').extract_first().decode('unicode_escape').encode('ascii', 'ignore')
...
这个代码应该是有效的
yield {
'text': quote.css('span.text::text').extract_first().encode("utf-8").decode('unicode_escape').encode('ascii', 'ignore'),
'author': quote.css('small.author::text').extract_first().encode("utf-8").decode('unicode_escape').encode('ascii', 'ignore'),
'tags': quote.css('div.tags a.tag::text').extract().encode("utf-8").decode('unicode_escape').encode('ascii', 'ignore'),
}
或者您可以创建一个函数将unicode转换为字符串
def convertToString(encodedString):
return encodedString.encode("utf-8").decode('unicode_escape').encode('ascii', 'ignore')
我使用项实现了相同的功能,为此处描述的数据提供了适当的结构: items.py
类别报价项目(刮擦项目):
title=scrapy.Field()
author=scrapy.Field()
tag=scrapy.Field()
蜘蛛
进口羊瘙痒
from..items导入报价项
类QuotesSpiderSpider(scrapy.Spider):
name='quotes\u spider'
#允许的_域=['http://quotes.toscrape.com/']
起始URL=['http://quotes.toscrape.com/']
def解析(自我,响应):
items=quoteItem()
all\u div\u quotes=response.css(“div.quote”)
对于所有分区报价中的报价:
title=quote.css('span.text::text')。首先提取()
author=quote.css('.author::text')。首先提取()
tags=quote.css(“a.tag::text”).extract()
项目['title']=title.strip(u'\u201c\u201d')#strip unicode字符u'\u201c\u201d
项目['author']=作者
items['tag']=“,”。join(str(x)表示标记中的x)#将列表转换为以逗号分隔的字符串
收益项目
运行
scrapy crawl quotes\u spider-o output.json
utf8编码页面中的所有字符都是Unicode字符(即使是这些字符)。您到底想删除什么?@DYZ在每个记录的“文本”属性内容中,开头都有一个“\u201c”。我可以很明显地解析出来,但这只会让我走到这一步。为什么不用“
”?@DYZ是的,这就是我所做的(用“”)替换“\u201c”),但是有没有一种方法可以自动删除unicode字符而无需硬编码?这些“
(和)字符是这些页面中数据的一部分。“我可以很明显地解析出来”,这是人们通常做的事情:如果你想从Python字符串中去掉一些字符,你可以使用.strip()
,例如在本例中quote.css('span.text::text').extract_first().strip(u'\u201c\u201d')