Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否从集合元素中删除unicode字符?_Python_Python 3.x_Scrapy_Python Unicode - Fatal编程技术网

Python 是否从集合元素中删除unicode字符?

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 = [

python新手。我正在编写一个scraper,它生成一组值,这些值都具有unicode字符

我想知道如何从中删除unicode字符。我觉得我在使用python3,但我不知道,因为命令很粗糙,我总是使用python2。从未使用过不使用python命令运行的工具

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')